This post 描述了如何将多个帐户绑定到$uid
集合中的单个users
。
以下是这些安全规则:
"rules": {
"users": {
"$uid": {
".write": "auth != null &&
(data.val() === null ||
(auth.provider === 'facebook' && auth.id === data.child('facebookUid').val()) ||
(auth.provider === 'twitter' && auth.id === data.child('twitterUid').val()))"
}
},
"usersMap": {
"facebook": {
"$fuid": {
".read": "auth != null && auth.provider === 'facebook' && auth.id === $fuid",
".write": "auth != null &&
(data.val() === null ||
root.child('users').child(data.val()).child('facebookUid').val() == auth.id)"
}
},
"twitter": {
"$tuid": {
".read": "auth != null && auth.provider === 'twitter' && auth.id === $tuid",
".write": "auth != null &&
(data.val() === null ||
root.child('users').child(data.val()).child('twitterUid').val() == auth.id)"
}
}
}
}
以下是我想象一种实用的方法来使用这些规则:
用户“使用他们的Facebook帐户登录”。
$fuid
是否存在?如果没有将新$uid
添加到users
。在成功回调中,在$fuid
下创建一个userMap/facebook
,其属性值$fuid.uid
也等于$uid
。
如果确实存在,则忽略该请求并返回“用户已存在”等消息。
$uid
<?h2>,该怎么办?
假设用户仍然使用他们的Facebook帐户登录并想要添加他们的Twitter帐户。让我们再次浏览该工作流程......
用户使用其他帐户登录。
$tuid
是否存在?不,但如果auth
对象同时持有Facebook和Twitter会话,那么我们不想创建另一个$uid
- 而是我们想要将$tuid
映射到同一个{{} 1}} $uid
也被映射。
$fuid
对象是否支持访问同步身份验证对象的属性?例如,如果我们使用Facebook和Twitter登录auth
两者都不同吗?
我是否以错误的方式思考这个问题?如何使用上述安全规则将其他帐户映射到auth.id
?
答案 0 :(得分:4)
如果您想将多个帐户绑定到一个帐户,则需要generate your own tokens。
例如,您可以使用Firebase.push为每个用户生成唯一ID,并在您的令牌中使用这些ID。这不是一件简单的事情,因为它要求你:
在许多使用案例中,这甚至可能适得其反;在大多数情况下,用户将使用单个auth方法登录,甚至可能希望使用diff auth方法来创建单独的帐户。因此,除非您拥有依赖于提供商之间共享数据的应用程序,否则可能不值得。