如何使用Angular 9中的Keycloak自动更新令牌以保持会话活动?

问题描述

我正在使用插件"keycloak-angular"

版本:

"keycloak-angular": "8.0.1","keycloak-js": "11.0.2",angular : 9.1.12

我已将“访问令牌寿命”设置为1分钟。而且我试图通过使用Keycloak.isTokenExpired()检查访问令牌过期时更新令牌。 它的工作,但我面临的问题是,有时会调用函数,而在大多数情况下不会调用它。 我想要实现的目标->每当访问令牌过期时,我都希望更新令牌,以保持用户登录状态。 试图通过互联网找到此问题,但找不到类似的内容

import {KeycloakService} from 'keycloak-angular';

export function initializer(keycloak: KeycloakService) {
  return () => {
    return new Promise(async (resolve,reject) => {
      try {
        const _REALM = "realm";
        const _URL = "http://example.com";
        const _CLIENT_ID = "id"

    await keycloak.init({
      config: {
        realm: _REALM,url: _URL,clientId: _CLIENT_ID,},initOptions: {
        onLoad: 'login-required',checkLoginIframe: false
      },enableBearerInterceptor: true,bearerExcludedUrls: ['/assets','/clients/public']
    })

    const keycloakAuth = keycloak.getKeycloakInstance();

    const updatetoken = async (): Promise < string > => {
      const {success,error} = keycloakAuth.updatetoken(5);
      return new Promise < string > ((res,rej) => {
        success(() => res(keycloakAuth.token));
        error(rej);
      });
    }
    const login = async (): Promise < void > => {
      const {success,error} = keycloakAuth.login();
      return new Promise < void > ((res2,rej2) => {
        success(res2);
        error(rej2);
      });
    }


    keycloakAuth.onTokenExpired = () => {
      if (keycloakAuth.refreshToken) {
        updatetoken();
      } else {
        login();
      }
    }

    resolve();
  } catch (error) {
    reject(error);
  }
});

}; }

这是我正在使用的代码,它位于app-init.ts中。

从“网络”标签获取此信息-

expires_in: 60
refresh_expires_in: 1800

主模块文件中提供程序的屏幕快照。 Provider in main module

PS-对此不熟悉,如果有疑问或我遗留了一些东西,我们深表歉意

解决方法

(刷新)仅当令牌未过期时才返回false。因此,您尝试在令牌尚未过期时对其进行刷新。

尝试以下代码以再次检查刷新状态

col-sm-4

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...