我想知道从 JWT 令牌获取用户数据的工作流程。我已关注文档但我没有得到用户详细信息。
参考链接:https ://akveo.github.io/nebular/docs/auth/getting-user-token#getting-user-token
请任何人告诉我我错过了哪里。
谢谢。
我想知道从 JWT 令牌获取用户数据的工作流程。我已关注文档但我没有得到用户详细信息。
参考链接:https ://akveo.github.io/nebular/docs/auth/getting-user-token#getting-user-token
请任何人告诉我我错过了哪里。
谢谢。
我假设您已经进行了身份验证,并且正在收到一个有效的令牌作为回报。对于我的情况,我只是制作了一个UserService
订阅onTokenChange()
of 的NbAuthService
. NbAuthJWTToken
token 有一个获取 token 有效载荷的方法getPayload()
。从那里我只是将令牌有效负载发布到我Subject
的UserService
. 任何需要用户数据的组件都将使用UserService
并订阅用户详细信息。
像这样的东西......
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];
}
}
@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
您能否提供您的auth module
配置和stackblitz示例?