使用令牌JWT Angular Auth的唯一会话

时间:2019-10-16 15:22:32

标签: angular jwt

我有一个想法,可以构建一个基本的会话身份验证应用程序,并且可以运行,但是我可以在两个不同的浏览器中以同一用户身份登录。
有谁知道如何构建auth方法来避免the double login?
我的应用实际上使用的是Angular 5,并且类似于后端Django Rest Framework, 这是我的实际方法auth service.ts

private apiRoot = 'http://127.0.0.1:8000/auth/';
    islogedin: boolean;
    constructor(private http: HttpClient) { }

    private setSession(authResult) {
      const token = authResult.token;
      const payload = <JWTPayload> jwtDecode(token);
      const expiresAt = moment.unix(payload.exp);

      localStorage.setItem('token', authResult.token);
      localStorage.setItem('expires_at', JSON.stringify(expiresAt.valueOf()));
    }

    get token(): string {
      return localStorage.getItem('token');
    }

    login(username: string, password: string) {
      return this.http.post(
        this.apiRoot.concat('login/'),
        { username, password }
      ).pipe(
        tap(response => this.setSession(response)),
        shareReplay(),
      );
    }

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此包Simple JWT(enter link description here)。

设置中有一个名为 JTI_CLAIM 的字段: 声明名称,用于存储令牌的唯一标识符。该标识符用于识别黑名单应用中的已撤销令牌。在某些情况下,可能有必要使用默认的“ jti”声明以外的其他声明来存储该值。