Этот пост описывает, как связать несколько аккаунтов с одним $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
?
Допустим, пользователь все еще вошел в систему со своей учетной записью Facebook и хочет добавить свою учетную запись Twitter. Давайте еще раз прокрутим этот рабочий процесс...
Пользователь входит в систему с другой учетной записью.
Существует ли
$tuid
? Нет, но если объектauth
содержит сеансы Facebook и Twitter, то мы не хотим создавать еще один$uid
— вместо этого мы хотим сопоставить$tuid
с тем же$uid
, что и$fuid
.Поддерживает ли объект
auth
доступ к свойствам объектов одновременной аутентификации? Например, если бы мы вошли в систему как с Facebook, так и с Twitter,auth.id
были бы разными для обоих, верно?Я думаю об этом неправильно? Как можно сопоставить дополнительные учетные записи с
$uid
, используя приведенные выше правила безопасности?