1

我想知道从 JWT 令牌获取用户数据的工作流程。我已关注文档但我没有得到用户详细信息。

参考链接:https ://akveo.github.io/nebular/docs/auth/getting-user-token#getting-user-token

请任何人告诉我我错过了哪里。

谢谢。

4

2 回答 2

1

我假设您已经进行了身份验证,并且正在收到一个有效的令牌作为回报。对于我的情况,我只是制作了一个UserService订阅onTokenChange()of 的NbAuthService. NbAuthJWTTokentoken 有一个获取 token 有效载荷的方法getPayload()。从那里我只是将令牌有效负载发布到我SubjectUserService. 任何需要用户数据的组件都将使用UserService并订阅用户详细信息。

像这样的东西......

用户模型.ts

export class User {
  public id: string;
  public username: string;
  public fullname: string;
  public email: string;
  public roles: string[];

  constructor(obj: any) {
    this.id = obj.nameid
    this.username = obj.unique_name;
    this.fullname = obj.full_name;
    this.email = obj.email;
    this.roles = Array.isArray(obj.role) ? obj.role : [obj.role];
  }
}

用户服务.ts

@Injectable({
  providedIn: 'root'
})
export class UserService implements OnDestroy {

  private _tokenChangeSubscription: Subscription;
  private _userDetailsData: User = null;
  private _userDetailsSource: BehaviorSubject<User> = new BehaviorSubject<User>(this._userDetailsData);

  /**
     You could inject NbTokenService here as well.  Then subscribe to the token
     changes with 
     
     this._tokenService.tokenChange()
       .subscribe((token: NbAuthJWTToken) => ...);
   */

  constructor(private _authService: NbAuthService) {
    this._tokenChangeSubscription = this._authService.onTokenChange()
      .subscribe((token: NbAuthJWTToken) => {
        if (token.isValid()) {
          const payload = token.getPayload();
          this._userDetailsData = new User(payload);
          this._userDetailsSource.next(this._userDetailsData);
        }
      });
  }

  getUserDetails(): Observable<User> {
    return this._userDetailsSource.asObservable();
  }

  ngOnDestroy() {
    if (this._tokenChangeSubscription)
      this._tokenChangeSubscription.unsubscribe();
  }
}

在这里,我使用了,但如果您愿意NbAuthService,您可以使用 来实现相同的效果。NbTokenService这两个服务都有 Observables,你可以订阅它以在新令牌发生变化时接收它(在身份验证时,在刷新时)。

https://akveo.github.io/nebular/docs/auth/nbauthservice#nbauthservice

https://akveo.github.io/nebular/docs/auth/nbtokenservice#nbtokenservice

于 2020-01-01T00:34:54.747 回答
0

您能否提供您的auth module配置和stackblitz示例?

于 2019-12-24T09:49:15.940 回答