oidc-клиент isLoggedIn()

Какой самый краткий и точный способ определения isLoggedIn() с одик-клиентом?

Как и в случае с Angualr2, мой первый метод был:

// 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 отозвал сеанс, поэтому, следуя логике, мой следующий метод был:

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

Теперь я замечаю, что, если я запускаю свое приложение с токеном с истекшим сроком действия, автоматическое обновление получает новый токен с файлом cookie сеанса после моего isLoggedIn() логика так, у меня ложный минус. Здесь userLoaded событие, но это не срабатывает, если токен все еще действует.

0 ответов

Другие вопросы по тегам