如果在创建帐户之前存在用户名,则与Firebase进行反应需要查询Firebase - 获取true / false而不获取整个对象?

时间:2017-11-24 04:17:24

标签: javascript reactjs firebase firebase-realtime-database firebase-security

我有一个'创建帐户'我的反应应用程序中的组件 - 如果我只使用auth.createUserWithEmailAndPassword函数,我可以创建一个帐户,但我决定我希望用户也拥有一个用户名。我的逻辑是

  1. 检查FB数据库中是否有user_profile,其属性为username
  2. 如果任何行有username我正在寻找,请返回true并告诉用户username已被占用。
  3. MySQL我会做这样的事情:SELECT id FROM user_profiles WHERE username = $username; - >这将使用' id'返回结果集。包含特定用户名的行的行,如果没有找到具有用户名的行,则返回null / empty / etc。

    如果FB用户通过身份验证,那么我可以使用它:

    firebase
        .database()
        .ref(userProfilesDatabase)
        .orderByChild('username')
        .equalTo('someusername')
        .once('value')
        .then(function(snapshot) {
            var username = snapshot.val().username;
            console.log(snapshot.val());
        });
    

    由于我的安全规则/权限被拒绝,上面的调用将无法正常工作,它还会检索包含所有数据的整个对象,从而公开我不想向尚未公开的用户公开的user_profile数据创建一个帐户 - 我只想在用户名存在/不存在的情况下拥有truefalse

    我当前的数据库架构看起来像这样(JSON格式,但希望很清楚),其中' user_profiles'是表名,内部的每个对象都是user_profile的ID,对应于包含我需要检查的用户名的对象以及其他属性:

    user_profiles
    
        8jgEZxuO7rbQAc8j8GdwIRgeqGG3
            age: 25
            username: someusername
    
        37ffEZsd338j8GdwIRgdfsDFreER
            age: 25
            username: anotherusername
    
        ....
    

    我的安全规则看起来像这样,我不知道如何向表中添加特定规则 - 文档似乎散落在各处并且难以理解:

    {
      "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
      }
    }
    

0 个答案:

没有答案