2017-08-09 122 views
1

我是Firebase服务的新手,但我已经完成了负责Firebase实时数据库交互的iOS应用程序的代码。不使用Firebase身份验证的实时数据库的Firebase规则

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

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

+1

如果不使用Firebase身份验证,则无法使用基于当前已通过身份验证的用户的安全规则。 –

+0

如果您打开[firebase控制台](https://console.firebase.google.com)的项目,那么您可以转到数据库部分并从那里设置Firebase规则(您会看到一个名为“规则“) –

回答

3

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

假设:您有一个认证服务器,其中已集成了Firebase Admin SDK(可能已经/已经)。

您需要以数据库/存储中使用您的验证方法来创建自定义的标记:

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

一旦通过验证,此身份将访问其他 火力地堡服务时使用,例如作为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) { 
    // ... 
}]; 
3

史蒂文森说,你不能使用安全没有Firebase身份验证的规则。

要使用火力身份验证,请按以下

步骤,你可以用自己的身份验证令牌以及从服务器获取火力点道理,那么你可以使用自定义的令牌认证API (https://firebase.google.com/docs/auth/ios/custom-auth)与火力

认证
  1. 要知道在服务器端自定义的令牌生成,按照此,https://firebase.google.com/docs/auth/admin/create-custom-tokens
  2. 一个用于存储实时数据库的用户数据通用模式是所有用户存储在一个单一的应用rs节点,其子节点是每个用户的uid值。如果你想限制访问这些数据使得只有登录用户可以看到自己的数据,你的规则将是这个样子:

例子:

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

这里权威性是授权对象。 uid是您从服务器端的自定义令牌生成发送的唯一令牌(用于以上情况的用户ID)。有关更多详细信息,请检查有关用户安全性的Firebase文档。