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

use*_*337 3 objective-c ios firebase swift firebase-realtime-database

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

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

所以问题是如何使用 Firebase 规则而不使用 Firebase 身份验证来保护我的数据库。

EDU*_*sta 5

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

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

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

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

经过身份验证后,将在访问其他 Firebase 服务(例如 Firebase 实时数据库和云存储)时使用此身份。此外,JWT 的内容将在 Firebase 实时数据库安全规则中的 auth 对象和云存储安全规则中的 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);
  });
Run Code Online (Sandbox Code Playgroud)

然后在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) {
  // ...
}];
Run Code Online (Sandbox Code Playgroud)