首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nebular管理员登录认证工作流程?

Nebular管理员登录认证工作流程?
EN

Stack Overflow用户
提问于 2019-12-03 19:50:34
回答 2查看 1.1K关注 0票数 1

我想知道从JWT token获取用户数据的工作流程。我已经按照文档操作了,但是我没有得到用户的详细信息。

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

请任何人让我知道我错过了哪里。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-01-01 08:34:55

我假设您已经进行了身份验证,并且正在接收一个有效的令牌作为返回。对于我的例子,我只做了一个订阅NbAuthServiceonTokenChange()UserServiceNbAuthJWTToken令牌有一个获取令牌有效负载getPayload()的方法。从那里,我只需将令牌有效负载发布到我的UserService中的Subject。任何需要用户数据的组件都将使用UserService并订阅用户详细信息。

就像这样……

user.model.ts

代码语言:javascript
复制
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];
  }
}

user.service.ts

代码语言:javascript
复制
@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来实现相同的功能。这两个服务都有可观察到的内容,您可以订阅这些内容,以便在更改令牌时接收新令牌(在身份验证时,在refresth上)。

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-12-24 17:49:16

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59156459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档