当前位置: 首页 > 知识库问答 >
问题:

带有Google Cloud功能的Firebase-实时数据库验证,以检查用户名是否已被占用

鲁鹏
2023-03-14

我发现了各种其他的帖子,它们似乎都让我相信我的实现应该是有效的,但仍然缺少一些东西。

下面是我的Firebase实时数据库规则:

"usernames": {
  ".read" : true,
  ".write" : "auth !== null",
  "$username":{
    ".validate": "!root.child('usernames').hasChild($username)"
  }
}
"usernames"
|---"johnDoe123" : "XrG34odsfla82343174094389"
|--- etc.....
let newUser = {}
newUser[req.query.username] = decoded.uid
admin.database()
 .ref('usernames')
 .update(newUser)
 .then(() => {
  console.log(`New username <${req.query.username}> added`)
   res.status(200).send(decoded)
 }).catch(e=>{
  console.log('Error', e)
 })

知道我做错了什么吗?

共有1个答案

贺功
2023-03-14

不确定这是不是最好的方法,但它对我的目的是检查第一次用户是在我的应用程序中设置,以确定用户名是不是已经被请求。如果是这样的话,它会返回JSON响应,表示它已经被占用了。如果它没有被接受,那么它会创建记录,然后返回成功的JSON响应。

module.exports = functions.https.onRequest((req, res) => {
  cors(req, res, () => {
    const tokenId = req.get('Authorization').split('Bearer ')[1];
    return admin.auth().verifyIdToken(tokenId)
        .then((decoded) => {
            admin.database()
            .ref('usernames')
            .child(req.query.username)
            .once('value', function(snapshot) {
                if(snapshot.val() === null){
                    let newUser = {}
                    newUser[req.query.username] = decoded.uid
                    admin.database()
                    .ref('usernames')
                    .update(newUser)
                    .then(() => {
                        console.log(`New username <${req.query.username}> added`)
                        res.status(200).send({
                            success: true,
                            message: "Username created" 
                        })
                    }).catch(err=>{
                        res.status(500).send(err)
                    })                    
                }
                else{
                    res.status(200).send({
                        success: false,
                        message: "Username already taken"
                    })
                }
            });
        })
        .catch((err) => {
            res.status(401).send(err)
        });
  })
});
 类似资料:
  • 问题内容: 无法让Firebase识别已经输入的用户名。下面的代码显示我正在尝试将输入的用户名与数据库的DataSnapshot进行比较。该代码似乎没有拾取输入的用户名。代码是否错误? 在按钮上单击,我希望能够将用户引导到该错误,并且在该错误唯一之前,不应将该页面推送到下一个活动。 JSON树(如果有帮助) 问题答案: 是异步操作。设置回调后,代码将继续运行,而您尚未获取任何用户名。到您检查mSw

  • 问题内容: 我正在尝试检查用户名是否存在。当我打电话时,快照值始终可用,但是它将打印我的整个数据库,而不仅仅是我请求的数据。当我打电话时,它总是返回null。我尝试了很多方法来解决。 这是我的代码: 这是我的json树: 这是安全规则: 问题答案: 修改 JSON 树以包含一个单独的节点,即在您创建新用户时添加每个用户的用户名,在用户修改其用户名时进行修改… 要检查您的用户名是否已经存在: 通过操

  • 目前我正在做一个新的Firebase web项目。我想检查当前登录的用户ID是否保存在实时数据库中,以便为用户在我的网站上提供一些特定的可能性/权限。 实时数据库: 我的问题:哪些JavaScript代码可以将当前登录的Firebase用户与此db值进行比较?

  • 问题内容: 我想使用jQuery.validate验证数据库中是否存在用户名,所以这是我到目前为止的内容: jQuery的: check-username.php: 此代码始终显示一个错误,即使没有使用用户名也是如此。 我正在使用jQuery Mobile 1.9.1 提前致谢。 问题答案: 通过更改我使用的PHP技术,我设法使它起作用,这是我的PHP: 谢谢大家在这里的帮助:)

  • 我目前正在安装Firebase应用程序,并能够检索使用该应用程序的所有用户的列表。当用户首次注册该应用程序时,他们需要确认自己的电话号码,就像现在大多数iOS应用程序一样。我正在“用户”节点中存储他们的电话号码。我的问题是如何在Firebase中查询以查看该电话号码是否存在于我的数据库中?基本上,我想根据我生成的电话号码列表和所有联系人列表进行查询 这将允许我显示特定联系人当前是否正在使用该应用程

  • 本文向大家介绍Ajax验证用户名或昵称是否已被注册,包括了Ajax验证用户名或昵称是否已被注册的使用技巧和注意事项,需要的朋友参考一下 JavaScript中XMLHttpRequest对象是整个Ajax技术的核心,它提供了异步发送请求的能力 。而用户名或昵称的验证就可以使XMLHttpRequest对象实现。下面是个小例子。 页面: 简单的输入框 JS代码如下: getElementsByNam