Parse将在年底关闭,所以我决定开始使用Firebase。我需要用3个字段实现注册过程:电子邮件、用户名、密码(电子邮件
由于Firebase没有提供像Parse这样管理用户名的简单方法,我决定只使用电子邮件/密码注册并保存一些附加数据,例如用户名。这是我的用户数据结构:
app : {
users: {
"some-user-uid": {
email: "test@test.com"
username: "myname"
}
}
}
但是,我想做的是使用户名唯一,并在创建帐户之前进行检查。以下是我的规则:
{
"rules": {
".read": true,
".write": true,
"users": {
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {".validate": "!root.child('users').child(newData.child('username').val()).exists()"}
}
}
}
}
非常感谢您的帮助
为用户名创建一个新分支,当新用户登录时,获取所有用户名的列表,并检查其是否存在于数据库中,如果存在,则向其显示toast,否则将其用户名放入用户名分支。。
按照Frank的建议保存用户名,但在保存用户名时,请使用Firebase中的runTransaction函数以确保不使用用户名。Firebase保证此功能是原子操作,因此您可以放心不会发生冲突
firebaseRef.child("usernames").child(username).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() == null) {
mutableData.setValue(authData.getUid());
return Transaction.success(mutableData);
}
return Transaction.abort();
}
@Override
public void onComplete(FirebaseError firebaseError, boolean commited, DataSnapshot dataSnapshot) {
if (commited) {
// username saved
} else {
// username exists
}
}
});
部分答案是存储用户名索引,您可以在安全规则中检查该索引:
app : {
users: {
"some-user-uid": {
email: "test@test.com"
username: "myname"
}
},
usernames: {
"myname": "some-user-uid"
}
}
因此,用户名节点将用户名映射到uid。它本质上读作“用户名‘myname’属于‘某个用户uid’”。
使用此数据结构,您的安全规则可以检查给定用户名是否已有条目:
"users": {
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {
".validate": "
!root.child('usernames').child(newData.val()).exists() ||
root.child('usernames').child(newData.val()).val() == $uid"
}
}
}
这将验证用户名是否尚未由任何人声明,或者是否由当前用户声明。
问题内容: 我最近遵循了有关Thinkster的教程,以使用Angular和Firebase创建Web应用程序。 本教程使用Firebase simpleLogin方法允许创建包含用户名的“配置文件”。 厂: 控制器: 在本教程的最后,有一个“后续步骤”部分,其中包括: 强制用户名唯一性-这很棘手,检查Firebase优先级,看看是否可以使用它们按用户名查询用户个人资料 我进行了搜索,但是找不到关
我有一个注册表格,通过以下步骤: 填写用户信息(姓名,地址等)和用户名 如果用户按下提交按钮,则检查用户名是否已经在数据库中 如果用户名已经在使用,他必须重命名用户名,如果没有,则显示他输入的内容(名称,地址等)。 他必须确认网站规则和他输入的数据是正确的。如果他按下确认按钮,数据库中将插入一行他的详细信息和用户名。 我不想在步骤2之后将行插入数据库中。,因为我不希望数据库中没有确认规则的用户的行
我的应用程序有一个单一的endpoint。它触发OAuth2授权授予流。它只能由匿名用户调用。每个匿名用户代表在资源服务器中具有不同权限的不同人员。需要每个匿名用户的同意(即不同的授权)。 Spring Boot OAuth2中需要每个匿名用户同意的配置是什么? 我正在使用Spring Boot oath2-Client 2.6.4和Spring Security 5.6.2。 目前,我有oaut
我有3个节点的hazelcast服务器集群,每个节点都启动了hazelcast客户端。hazelcast客户端使用智能路由,使用客户端/服务器模式。 我收集通过IExecutorService和ClientService连接到Hazelcast服务器集群的客户端列表。每个Hazelcast客户端中的getConnectedClients()。在获取列表后,我想循环访问客户端的获取列表,并将其与自己
我是新来的蛋糕和构建一个应用程序来学习它。我的用户注册系统有一些问题。到目前为止,这是我在控制器中的注册代码: 在我的模型中,我有这样的方法来散列密码: 这样,用户将使用用户名、电子邮件和哈希密码添加到我的数据库中的my表中。但是,没有进行检查以确保用户名和电子邮件是唯一的。 根据我有限的理解,我需要在我的模型中添加一些验证规则,以确保用户名和电子邮件字段在输入表之前是唯一的?目前,我只有以下验证
标题试图解释该场景: 该客户具有登录功能,允许同名但在不同位置(商店)的用户。 在登录页面,用户通知用户名、密码和所需的存储。 使用Spring Security(使用JPA)我创建了一个UserDetailsService实现,但此接口始终接收一个用户名(并且存储对于与其他用户不同至关重要)。 鉴于这种情况,我有两个问题: > 如何通知spring security有关附加字段的信息?(门店)