2

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 защитить конечную точку в базе данных.

+0

При упоминании этого: «Когда я выгрузить на auth.uid (по правилу Firebase) с соответствующей информацией о пользователе», который ID вы заменяющая его с? Вы hardcoding "facebook: 10153081497714658"? –

+0

Не может ли Auth0 предоставить токен Firebase в качестве опции? Я уверен, что у них есть интеграция с Firebase. Также, пытаясь создать UID, которые выглядят как внутренняя реализация Firebase [приведет к поломке] (https://groups.google.com/forum/#!topic/firebase-talk/s9mv4S46Qs0). – Kato

+0

Какая ошибка вы получаете от Firebase? Где ваш вызов authWithOAuthToken() или authWithCustomToken()? Может ли Auth0 сделать эту часть для вас? Думаю, нет. – Kato

ответ

Смежные вопросы