我正在使用angularfire2进行身份验证。当令牌到期时,我需要获得新的有效令牌。当前代码
private user: Observable<any>;
constructor(pprivate _firebaseAuth: AngularFireAuth) {
this.user = _firebaseAuth.authState;
}
refreshToken() {
this.user.switchMap(
(user) => {
user.getIdToken(true).then((tk) => {
localStorage.setItem('id_token', tk);;
});
}
);
}
这是刷新令牌的正确方法吗?
答案 0 :(得分:1)
getIdToken
将在ID令牌过期时刷新它,如果ID令牌未过期则返回该ID令牌。理想情况下应该足够了。您可以在任何需要的时候获得有效令牌。
如果您需要在到期前主动刷新令牌,您可以执行类似于您建议的操作,但需要跟踪ID令牌的到期时间。在每次通话时都这样做是非常低效的。
ID令牌的有效期为1小时。您可以在到期前强制刷新几分钟。获得到期时间的一种方法是通过解析令牌有效负载中的exp
字段。
答案 1 :(得分:0)
我不确定您使用另一个令牌来操纵身份验证的主要思想是什么。我意识到AngularFireAuth有自己的方式来管理令牌和其他部分。事实是,因为您将变量“ user”声明为Observable,所以每次使用它时,它都应该嵌入“ async”。我可以举一个在我的应用程序中也能正常工作的示例:
<ul>
<li class="nav-item" *ngIf="user | async">
<a class="nav-link" (click)="onLogout()"> Logout </a>
</li>
<ng-container *ngIf="!(user | async)">
<li class="nav-item">
<a routerLink="/" class="nav-link">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/auth/login"> Login </a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="/auth/register"> Register </a>
</li>
</ng-container>
</ul>