如何解决如何使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。