我在我的移动应用程序中使用 ionic 3 Angular,并使用 Facebook 原生 Cordova 插件进行登录。
Firebase 数据库安全文档使用类似
的语法{
"rules":{
"users":{
"$user_id":{
".write":"$user_id === auth.id"
}
}
}
}
我的应用程序中的 Facebook 身份验证如下所示
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等?
最佳答案
理论上,auth firebase 变量是 token 处理的:假设您已经启用了 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 处理。
关于javascript - 使用fb身份验证的firebase json db安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264018/