oidc-client isLoggedIn()

时间:2017-07-25 20:41:10

标签: angular oauth-2.0 oidc oidc-client-js

使用odic-client确定isLoggedIn()的最简洁,最准确的方法是什么?

就像Angualr2 example我的第一种方法一样:

// return true if user (token) exists.
public isLoggedIn(): Promise<boolean> {
    return this.userManager.getUser().then(user => !!user);
}

然后处理过期的令牌:

// 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;
    });
}

我的应用程序的要求是,如果OP已撤销会话,则不会将用户显示为已登录,因此,遵循逻辑here,我的下一个方法是:

// 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;
}

现在我注意到,如果我使用过期的令牌启动我的应用程序,则在我的isLoggedIn()逻辑之后,使用会话cookie获取带有会话cookie的新令牌,因此,我有一个误报。有userLoaded事件,但如果令牌仍然有效,则会触发该事件。

0 个答案:

没有答案