使用 fb 身份验证的 firebase json db 安全规则

Posted

技术标签:

【中文标题】使用 fb 身份验证的 firebase json db 安全规则【英文标题】:firebase json db security rule using fb authentication 【发布时间】:2018-03-13 19:03:53 【问题描述】:

我正在为我的移动应用程序使用 ionic 3 angular,并且使用 fb 本机 cordova 插件登录。

firebase db 安全文档使用类似

的语法
  
   "rules":  
      "users":  
         "$user_id":  
            ".write":"$user_id === auth.id"
         
      
   

我的应用程序中的 fb 身份验证如下所示

 doLogin()
    if (this.platform.is('cordova')) 
      return this.fb.login(['email', 'public_profile']).then(res => 
        const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
         firebase.auth().signInWithCredential(facebookCredential);
         this.navCtrl.setRoot(TabsPage); 
      )
    

我的问题是 auth firebase 变量在上面的代码中得到了处理,或者我需要一些额外的东西来让 auth 获得所需的 uid 等?

【问题讨论】:

【参考方案1】:

auth firebase 变量在理论上是由令牌管理的:假设您已经启用了 Facebook 登录方法。但是,您显示的 数据库 规则不一定相关。

这些规则(同上):

"rules": 
    "users":
        "$variable": ".write": "$variable=== auth.uid" 

规定用户只能写入具有相同 uid 的子节点。我将$user_id 更改为$variable 以突出显示$ 只是表示一个代表子节点名称的变量。 (我可能应该提到它应该是auth.uid 而不是auth.id

这用于保存用户特定的数据。所以,当他们注册时,你可以有一个功能说

firebase.database().ref('users').child(firebase.auth().currentUser.uid).update(<your custom data here>);

*请注意用户的孩子是“firebase.auth().currentUser.uid”,可以选择从firebase.auth().signInWithCredential() promise 中检索。

抱歉,如果解释过于必要。简而言之。登录后,uid 始终与 firebase.auth().currentUser.uid 一起出现,并且该 uid 是数据库规则在 auth.uid 中所指的内容,最后,auth/uid/etc 几乎 100% 由 firebase 处理。

【讨论】:

是的,主要目的是询问它是否得到照顾。我没有过多关注确切的规则定义

以上是关于使用 fb 身份验证的 firebase json db 安全规则的主要内容,如果未能解决你的问题,请参考以下文章

以管理员身份使用自定义令牌向 FB DB 发出 REST 请求

如何使用 Firebase 规则进行身份验证(RESTful)

将 Wordpress 用户导入 Firebase 身份验证

使用 php 设置 firebase v3 自定义身份验证

如何使用 JWT for Google firebase 生成身份验证令牌?

Firebase Push - 身份验证凭据无效