firebase - Flutter 检查用户名是否已存在于 Firestore 数据库中
问题描述
在我的应用程序中,我必须实现一个 SignUpScreen。
一切正常,但有一件事不行。当有人想注册时,他不能像其他用户一样使用相同的电子邮件,这是可行的,但我也希望他不能使用相同的用户名。我在云 Firestore 中有一个名为“SerX”的集合和一个名为“用户名:”的文档字段。如果有人知道该怎么做,请评论您的解决方案。
应该有这样的回报 return 'This username already exists!';
Widget _buildUserNameTF() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Username',
style: kLabelStyle,
),
SizedBox(height: 10.0),
Container(
alignment: Alignment.centerLeft,
decoration: kBoxDecorationStyle,
height: 60.0,
child: TextFormField(
keyboardType: TextInputType.text,
validator: (input) {
if (input.isEmpty) {
return 'Please enter a username';
}
if(input.length < 6){
return 'Your username needs to be at least 6 characters';
}else if(input.length > 12){
return 'Your username needs to be at most 12 characters';
}
if (!RegExp(
r'^[a-zA-Z0-9]+$')
.hasMatch(input)) {
return 'Please enter a valid username.';
}
},
onSaved: (input) => _Username = input,
style: TextStyle(
color: Colors.black,
fontFamily: 'Orbitron',
),
decoration: InputDecoration(
border: InputBorder.none,
contentPadding: EdgeInsets.only(top: 14.0),
prefixIcon: Icon(
Icons.supervised_user_circle,
color: Colors.black,
),
hintText: 'Enter your Username',
hintStyle: kHintTextStyle,
),
),
),
],
);
}
解决方案
这是一个简单的函数,用于检查用户名是否已经存在于客户端。
var _instance = Firestore.instance;
Future<bool> userExists(String username) async =>
(await _instance.collection("users").where("username", isEqualTo: username).getDocuments()).documents.length > 0;
客户端检查不是一个安全的解决方案。您应该为此使用Cloud Functions for Firebase。
推荐阅读
- c# - 断点不会在 Blazor Webassembly 项目、ASP.NET Core 3.1、
- ffmpeg - 'undefined symbol: __stack_chk_guard' in libopenh264.so 使用 emcc 构建 FFmpeg 时
- java - 找不到类:“xxx”Intellij (java)
- azure-language-understanding - 无法在 Azure 门户中创建新的认知服务
- azure - 我可以使用 azure vm rest api (PUT) 更改现有虚拟机中的操作系统配置文件吗?
- c# - 如何使用所有复选框在表格内循环
- c# - if 语句和 2 个数组的 C# 问题
- authentication - 授权端点如何知道用户已登录?
- python - 将带有键的字典传递给函数
- python - 如何根据给定的文本单击跨度