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
событие, но это не срабатывает, если токен все еще действует.