2016-07-06 3 views
10

Я использую звонок библиотеки библиотеки JS firebase.auth().signInWithEmailAndPassword(email, password) и возвращаю объект User. Объект User содержит refreshToken.Как использовать Firebase refreshToken для повторной проверки подлинности?

Я использую curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN' для звонков в Firebase.

Токен со временем истекает. Чтобы сделать его похожим на приложение (iOS и macOS), существует постоянный логин, я хочу обновить токен, как это сделать с помощью библиотеки REST или JS? Я не могу найти никаких вызовов в документации, которые позволяют мне использовать refreshToken, чтобы получить новый token.

ответ

6

В настоящее время единственный способ, которым я нашел, чтобы сделать это здесь: https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

Вы должны сделать HTTP re квест:

POSThttps://securetoken.googleapis.com/v1/token?key=YOUR_KEY

Где YOUR_KEY можно найти в Google developers console > API Manager > Credentials. Он находится под разделом API Keys.

Убедитесь тело запроса структурировано в следующем формате:.

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Где REFRESH_TOKEN является маркером обновления от Firebase объекта пользователя, когда они подписали в

POST вызова будет возвращать новый access_token.


** UPDATE ** это также теперь документированы в Firebase REST документы под Exchange a refresh token for an ID token раздел:

https://firebase.google.com/docs/reference/rest/auth/

+0

Должен ли этот запрос работать для обновления токена API Gmail? @kgaidis – ArtStyle

+0

@ArtStyle Я не знаком с API Gmail, поэтому я не знаю – kgaidis

+0

Это работает, но, к сожалению, не запускает firebase [onIdTokenChanged] (https://firebase.google.com/docs/reference/js/firebase. auth.Auth # onIdTokenChanged) слушатель ... Я чувствую, что это должно – Luiz

5

При совершении звонка из браузера .getToken(true) автоматически обновит ваш токен. Сделайте вызов, как это:

firebase.auth().currentUser.getToken(/ forceRefresh/true) 
.then(function(idToken) { 

}).catch(function(error) { 

}); 

Подробнее здесь https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

Update:

getToken() осуждается теперь использовать вместо getIdToken(true)

+2

не CurrentUser быть бы NULL на свежий запуск приложения?Я не знаю, как это делается в обычном браузере, но я не хранил файлы cookie или локальные данные. Я только храню refreshToken и все остальное, что мне особенно нужно. – kgaidis

+1

Сначала необходимо выполнить вход для использования этого кода. Если вы используете вход в firebase, он должен работать. – Yevgen

+2

Это! Но '.getToken' устарел сейчас, вы должны использовать' .getIdToken'. –

0
// Create a callback which logs the current auth state 
function authDataCallback(authData) { 
    if (authData) { 
    console.log("User " + authData['uid'] + " is logged with token" + authData['ie']); 
    } else { 
    console.log("User is logged out"); 
    } 
} 
// Register the callback to be fired every time auth state changes 
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.onAuth(authDataCallback); 

Event onAuth будет называться при обновлении страницы, если пользователь был удален authData будет null, иначе нет. Вы можете найти токен в authdata['ie']. На скриншоте ниже я напечатал токен после объекта auth и authdata, как вы можете видеть, что authData ['ie'] и токен похожи.

authdata.ie and token

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