到期后Angularfire2刷新令牌

时间:2018-04-27 14:05:48

标签: angular firebase firebase-authentication angular5 angularfire2

我正在使用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);;
          });
      }
  );
}

这是刷新令牌的正确方法吗?

2 个答案:

答案 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>