6

В AngularFire вы смогли получить доступ к провайдерам (например, Google) accessToken для аутентифицированного пользователя.Как получить токен доступа текущего пользователя в AngularFire2?

Невозможно получить доступ к этому при помощи AngularFire2?

На первом входе говорят так:

this.af.auth.subscribe(user=> { 
    if (user) { 
    console.log(user.google); 
    } 
}); 

Он будет выйти на idToken, маркер доступа, поставщик, Но (на обновлении страницы) будет впоследствии выйти из стандартных деталей (UID, DISPLAYNAME и т.д. ...) И accessToken недоступна?

Есть ли способ доступа к текущим пользователям accessToken?

ответ

0

Маркер доступа доступен только тогда, когда первый пользователь входит в С Firebase migration guide for web developers:.

С API Firebase.com аутентификации, вы можете легко использовать маркер доступа провайдера взывать к API поставщика и получить дополнительную информацию. Этот токен доступа по-прежнему доступен, но только сразу после завершения действия входа.

var auth = firebase.auth(); 

var provider = new firebase.auth.GoogleAuthProvider(); 
auth.signInWithPopup(provider).then(function(result) { 
    var accessToken = result.credential.accessToken; 
}); 

Так что на самом деле не существует на обновлении страницы. Если вы хотите, чтобы он оставался доступным, вам нужно будет продолжать его самостоятельно.

+2

Нет, к сожалению, это не будет работать с библиотекой AngularFire2. – Intellidroid

+1

Да, я тоже этого не понимаю. Похоже, что 'login()' разрешается с разными данными, чем 'signInWithPopup()'. –

+1

В конце концов, я просто использую SDK Firebase для получения токена, а затем сохраняю его в localStorage. Я обнаружил, что мне не нужно было сразу инициализировать AngularFire2, так как он немного фанк (если текущий пользователь все еще находится в режиме auth period Firebase), а затем, возможно, ленивая загрузка этого (AngularFire2) позже. – Intellidroid

0

С AngularFire2, вы можете получить маркер, как это:

this.af.auth.getToken() // returns a firebase.Promise<any> 

Если вы хотите получить ES6 обещание вместо этого, просто использовать

Promise.resolve() 
    .then(() => this.af.auth.getToken() as Promise<string>) 
1

Это работает для меня:

this.af.auth.getAuth().auth.getToken(false);//true if you want to force token refresh 

Вы можете поместить его в Сервис, а затем вы можете получить токен следующим образом:

this.authService.getToken().then(
    (token) => console.debug(`******** Token: ${token}`)); 
+0

Это проблема с getAuth(), хотя .... API getAuth() изменил поведение с момента добавления поддержки Firebase 3. Это вернет null для начального значения, когда страница загружается, даже если пользователь фактически зарегистрирован in. Пожалуйста, соблюдайте фактическое authState асинхронно, подписавшись на службу auth: af.auth.subscribe(). Метод getAuth будет удален в будущих выпусках – Intellidroid

+0

Я знаю, что документация говорит об этом, но мое решение работает нормально. Единственная проблема заключается в предупреждении, что это будет работать в будущем, как вы сказали, но не волнуйтесь, потому что в этот момент будет существовать другой новый метод или альтернативное решение для использования. –

0

getToken устарел сейчас. Вместо этого вы должны использовать getIdToken:

this.af.auth.currentUser.getIdToken(true) 
    .then((token) => localStorage.setItem('tokenId', token)); 
Смежные вопросы