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

Ios 不使用Firebase身份验证的实时数据库的Firebase规则,ios,objective-c,swift,firebase,firebase-realtime-database,Ios,Objective C,Swift,Firebase,Firebase Realtime Database,我对Firebase服务非常陌生,但我已经完成了iOS应用程序的代码,该应用程序负责Firebase实时数据库交互 现在我想让我的应用程序安全,并用Firebase规则保护它。存在一个问题,我使用自己的用户身份验证,因此我不使用Firebase Auth 因此,问题是如何使用Firebase规则保护数据库,而不使用Firebase身份验证。注意:据我所知,在Firebase中直接使用自定义身份验证系统是不可能的 假设:您有一个身份验证服务器,Firebase Admin SDK(可以/已经)集成

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

现在我想让我的应用程序安全,并用Firebase规则保护它。存在一个问题,我使用自己的用户身份验证,因此我不使用Firebase Auth


因此,问题是如何使用Firebase规则保护数据库,而不使用Firebase身份验证。

注意:据我所知,在Firebase中直接使用自定义身份验证系统是不可能的

假设:您有一个身份验证服务器,Firebase Admin SDK(可以/已经)集成了该服务器。

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

一旦通过身份验证,在访问其他服务器时将使用此标识 Firebase服务,如Firebase实时数据库和云 存储此外,JWT的内容将在 Firebase实时数据库安全规则和 云存储安全规则中的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) {
  // ...
}];

正如Stevenson所说,没有firebase身份验证,您无法使用安全规则

要使用firebase身份验证,请执行以下步骤

您可以从服务器获取firebase令牌以及您自己的身份验证令牌,然后您可以使用自定义令牌身份验证api ()向firebase进行身份验证

  • 要了解服务器端的自定义令牌生成,请执行以下操作:
  • 在实时数据库中存储用户数据的一种常见模式是将所有用户存储在单个用户节点中,其子节点是每个用户的uid值。如果要限制对此数据的访问,以便只有登录的用户才能看到自己的数据,则规则如下所示:
  • 例如:

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

    这里,auth是授权对象。uid是唯一的令牌(上述情况下的用户id),通过服务器端的自定义令牌生成发送。有关详细信息,请检查有关用户安全性的firebase文档。

    如果不使用firebase身份验证,则无法使用基于当前已验证用户的安全规则。如果您打开项目进行验证,则可以转到数据库部分,然后从那里设置firebase规则(您将看到一个名为“规则”的选项卡)