在AngularFire中,您可以访问经过身份验证的用户的提供程序(例如Google)accessToken。
似乎没有办法使用AngularFire2访问它?
在初始登录时说像这样:
this.af.auth.subscribe(user=> {
if (user) {
console.log(user.google);
}
});
它将注销idToken,accessToken,provider,但是(在页面刷新上)随后将注销标准详细信息(uid,displayName等。。。)而且accessToken不是可访问的属性?
是否可以访问当前用户的accessToken?
仅当用户首次登录时才能访问访问令牌。从Firebase migration guide for web developers:
使用Firebase.com身份验证API,您可以轻松地使用提供商的访问令牌来调出提供商的API并获取其他信息。此访问令牌仍然可用,但仅在登录操作完成后立即可用。
var auth = firebase.auth(); var provider = new firebase.auth.GoogleAuthProvider(); auth.signInWithPopup(provider).then(function(result) { var accessToken = result.credential.accessToken; });
所以它确实在页面刷新上不可用。如果您希望它保持可用状态,则需要自己将其保留。
这对我有用:
this.af.auth.getAuth().auth.getToken(false);//true if you want to force token refresh
您可以将其放入服务中,然后可以像这样获得令牌:
this.authService.getToken().then(
(token) => console.debug(`******** Token: ${token}`));
getToken
现在已弃用。您应该改用getIdToken
:
getIdToken
使用AngularFire2,您可以像这样获得令牌:
this.af.auth.currentUser.getIdToken(true)
.then((token) => localStorage.setItem('tokenId', token));
如果要获得ES6 Promise,只需使用
this.af.auth.getToken() // returns a firebase.Promise<any>
Promise.resolve()
.then(() => this.af.auth.getToken() as Promise<string>)
从angularfire2的存储中获取身份验证令牌
googleSignIn() {
return this.af_auth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider())
.then(res => {
// retrieve access token
const AccessToken = res.credential['accessToken'];
console.log("Access token: ", AccessToken);
})
.catch(error => {
console.log(error.message);
});
在本讨论中可以看到:JSON.parse(JSON.stringify(this.afAuth.auth.currentUser)).stsTokenManager.accessToken
[使用AngularFire2 :(例如:使用电子邮件和密码组合注册用户。]
https://github.com/angular/angularfire2/issues/725