Wil*_*han 5 oauth-2.0 openid-connect oidc-client-js angular
isLoggedIn()
使用odic-client 确定最简洁准确的方法是什么?
与Angualr2示例非常相似,我的第一种方法是:
// return true if user (token) exists.
public isLoggedIn(): Promise<boolean> {
return this.userManager.getUser().then(user => !!user);
}
Run Code Online (Sandbox Code Playgroud)
然后处理过期的令牌:
// return true if user (token) exists and not expired.
public isLoggedIn(): Promise<boolean> {
return this.userManager.getUser().then(user => {
if (!user) {
return false;
}
return !user.expired;
});
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序的一个要求是,如果OP已撤销会话,它不会显示用户已登录,因此,遵循此处的逻辑,我的下一个方法是:
// return true if user (token) and session (cookie) exists and sub matches and not expired.
public async isLoggedIn(): Promise<boolean> {
const session = await this.userManager.querySessionStatus().catch(() => null);
const user = await this.userManager.getUser();
if (!user || !session) {
return false;
}
if (session.sub !== user.profile.sub) {
return false;
}
return !user.expired;
}
Run Code Online (Sandbox Code Playgroud)
现在我注意到,如果我使用过期的令牌启动我的应用程序无声续订会在我的isLoggedIn()
逻辑之后获得带有会话cookie的新令牌,那么我有一个假阴性.有userLoaded
事件,但如果令牌仍然有效,则不会触发.
归档时间: |
|
查看次数: |
763 次 |
最近记录: |