首页 文章

不使用Firebase身份验证的实时数据库的Firebase规则

提问于
浏览
1

我对Firebase服务很新,但我已经完成了我的iOS应用程序的代码,该应用程序负责Firebase实时数据库交互 .

现在,我希望使用Firebase规则保护我的应用并保护它 . 有一个问题是我正在为用户使用自己的身份验证,因此我不使用Firebase身份验证 .

所以问题是我如何使用Firebase规则和没有Firebase Auth来保护我的数据库 .

2 回答

  • 3

    注意:据我所知,在Firebase中无法使用自定义身份验证系统 directly .

    Assumption: You have an authentication server which Firebase Admin SDK (can be/has already been) integrated.

    您需要创建自定义令牌才能在数据库/存储中使用您的身份验证:

    https://firebase.google.com/docs/auth/admin/create-custom-tokens

    经过身份验证后,将在访问其他Firebase服务时使用此身份,例如Firebase实时数据库和 Cloud 存储 . 此外,JWT的内容将在您的Firebase实时数据库安全规则中的auth对象和您的 Cloud 存储安全规则中的request.auth对象中提供 .

    从上层链接省略Java和Python

    在服务器中:

    // Step 1: Your client has sent the credentials.
    // Step 2: Fetch the client's unique id, and create a custom token with the Admin SDK.
    
    var uid = "some-uid"; 
    
    admin.auth().createCustomToken(uid)
      .then(function(customToken) {
        // Send token back to client
      })
      .catch(function(error) {
        console.log("Error creating custom token:", error);
      });
    

    然后在iOS部分:

    // Step 1: Login with your own authentication system.
    // Step 2: Send your credentials to your server, and fetch the customToken.
    // Step 3: Sign in with FIRAuth:
    
    [[FIRAuth auth] signInWithCustomToken:customToken
                               completion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
      // ...
    }];
    
  • 3

    史蒂文森说,如果没有firebase身份验证,你就无法使用安全规则 .

    要使用firebase身份验证,请按照以下步骤操作

    您可以从服务器获取firebase令牌以及您自己的身份验证令牌,然后您可以使用自定义令牌身份验证API(https://firebase.google.com/docs/auth/ios/custom-auth)通过firebase进行身份验证

    • 要了解服务器端的自定义令牌生成,请按照此处,https://firebase.google.com/docs/auth/admin/create-custom-tokens

    • 在实时数据库中存储用户数据的一种常见模式是将所有用户存储在单个用户节点中,其子节点是每个用户的uid值 . 如果您想限制对此数据的访问,以便只有登录用户可以看到自己的数据,那么您的规则将如下所示:

    例:

    {
          "rules": {
                "users": {
                  "$uid": {
                    ".read":  "auth != null && auth.uid == $uid",
                    ".write": "auth != null && auth.uid == $uid"
                  }
                }
              }
     }
    

    这里 auth 是授权对象 . uid 是您从服务器端生成自定义令牌的唯一令牌(上述用户ID) . 有关详细信息,请查看有关用户安全性的firebase文档 .

相关问题