Auth0 Войти с firebase делегациейAuth0 с Firebase Делегация
.controller('LoginCtrl', function($scope, auth, $state, store) {
auth.signin({
authParams: {
// This asks for the refresh token
// So that the user never has to log in again
scope: 'openid offline_access',
// This is the device name
device: 'Mobile device'
},
// Make the widget non closeable
standalone: true
}, function(profile, token, accessToken, state, refreshToken) {
// Login was successful
// We need to save the information from the login
store.set('profile', profile);
store.set('token', token);
store.set('refreshToken', refreshToken);
auth.getToken({
api: 'firebase'
}).then(function(delegation) {
store.set('firebaseToken', delegation.id_token);
$state.go('app.categories');
}, function(error) {
console.log("There was an error getting the firebase token", error);
})
}, function(error) {
console.log("There was an error logging in", error);
});
})
Правила на Auth0, чтобы назначить правильный UID раздел делегата маркеров:
function (user, context, callback) {
var isFirebase = context.request.body.api_type === "firebase";
if (context.isDelegation && isFirebase) {
console.log(user.user_id);
var uid = user.user_id;
var provider = uid.split("|")[0];
var id = uid.substring(uid.indexOf("|") + 1);
user.firebase_data = {
uid: provider + ":" + id
};
}
return callback(null, user, context);
}
Доказательства, что маркер как UID (как ожидать от firebase в декодированных маркерах)
{
"iss": "https://gitreport.auth0.com/",
"sub": "facebook|10153081497714658",
"aud": "ZCCZrJ0ggUrk67ePh2UgHSl9FKfpMlcS",
"exp": 1438989556,
"iat": 1438953556,
"v": 0,
"d": {
"fb_id": "facebook|10153081497714658",
"uid": "facebook:10153081497714658"
},
"azp": "ZCCZrJ0ggUrk67ePh2UgHSl9FKfpMlcS"
}
попытки записи// пользователей в $ Firebase ш Ith UID: т.е./пользователей/facebook | 34234234 Правило:
{
"rules": {
"users": {
"$user_id": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($user_id)
".write": "$user_id === auth.uid"
}
},
"salt" : {
".read" : true,
".write" : false
},
"categories" : {
".read" : true,
".write" : false
},
".read": true,
".write": false
}
}
К сожалению, я не могу отлаживать, что происходит в течение firebase стороны. Я понял, что Firebase ожидает uid внутри объекта-делегата токена Firebase, но любая помощь здесь будет очень признательна.
Когда я заменяю auth.uid (по правилу Firebase) с соответствующей информацией пользователя, информация записывается, поэтому я уверен, что если я смогу как-то доставить правильный uid для firebase внутри токена, это все встать на свои места.
И да, я намеревался использовать: вместо | для разделителя в uid. Это было основано на том, что ожидает Firebase.
Ответы на вопросы Т. Като:
@Kato Auth0 использует концепцию делегирования для создания Firebase токена. Этот токен хранится в браузере клиента. При декодировании токен выглядит как блок, вышеописанный (доказательство того, что токен содержит uid ...). Документация firebase указывает, что uid равен provider:id
, однако последняя статья, которую вы отправляете мне, указывает, что uid является просто уникальным сгенерированная строка.
Думаю, я не понимаю, где начинается ответственность auth0 и заканчивается ли битбаза? Зачем мне вообще нужно делегировать токен из auth0? Должен ли я просто сделать совершенно отдельный вызов firebase для создания токена? Что мне делать с токеном firebase, который был создан Auth0?
Что действительно интересно об этом для меня, так это то, что ни люди Auth0, ни люди Firebase действительно не понимают вопрос, который я задаю, и, возможно, это потому, что я не спрашиваю его правильно.
В принципе, я просто хочу проверить аутентификацию своих пользователей с помощью Auth0, а затем Firebase защитить конечную точку в базе данных.
При упоминании этого: «Когда я выгрузить на auth.uid (по правилу Firebase) с соответствующей информацией о пользователе», который ID вы заменяющая его с? Вы hardcoding "facebook: 10153081497714658"? –
Не может ли Auth0 предоставить токен Firebase в качестве опции? Я уверен, что у них есть интеграция с Firebase. Также, пытаясь создать UID, которые выглядят как внутренняя реализация Firebase [приведет к поломке] (https://groups.google.com/forum/#!topic/firebase-talk/s9mv4S46Qs0). – Kato
Какая ошибка вы получаете от Firebase? Где ваш вызов authWithOAuthToken() или authWithCustomToken()? Может ли Auth0 сделать эту часть для вас? Думаю, нет. – Kato