我想知道从JWT token获取用户数据的工作流程。我已经按照文档操作了,但是我没有得到用户的详细信息。
参考链接:https://akveo.github.io/nebular/docs/auth/getting-user-token#getting-user-token
请任何人让我知道我错过了哪里。
谢谢。
发布于 2020-01-01 08:34:55
我假设您已经进行了身份验证,并且正在接收一个有效的令牌作为返回。对于我的例子,我只做了一个订阅NbAuthService的onTokenChange()的UserService。NbAuthJWTToken令牌有一个获取令牌有效负载getPayload()的方法。从那里,我只需将令牌有效负载发布到我的UserService中的Subject。任何需要用户数据的组件都将使用UserService并订阅用户详细信息。
就像这样……
user.model.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];
}
}user.service.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来实现相同的功能。这两个服务都有可观察到的内容,您可以订阅这些内容,以便在更改令牌时接收新令牌(在身份验证时,在refresth上)。
https://akveo.github.io/nebular/docs/auth/nbauthservice#nbauthservice
https://akveo.github.io/nebular/docs/auth/nbtokenservice#nbtokenservice
发布于 2019-12-24 17:49:16
您能提供您的auth module配置和stackblitz 示例吗?
https://stackoverflow.com/questions/59156459
复制相似问题