我正在使用插件“钥匙斗篷-角”。
版本:
"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
主模块文件中提供程序的截图。主模块中的提供程序
新事物,如果有疑问或者我留下了什么东西,请道歉。
发布于 2020-11-02 05:38:22
(刷新)只有在令牌未过期时才返回false。因此,当令牌尚未过期时,您将尝试刷新它。
尝试下面的代码再次检查刷新的状态
keycloak.onTokenExpired = ()=>{
console.log('expired '+new Date());
keycloak.updateToken(50).success((refreshed)=>{
if (refreshed){
console.log('refreshed '+new Date());
}else {
console.log('not refreshed '+new Date());
}
}).error(() => {
console.error('Failed to refresh token '+new Date());
});
}
发布于 2022-11-15 13:04:07
对于Keycloack版本19使用,
_kc.updateToken(5)
.then(function(refreshed) {
if (refreshed) {
alert('Token was successfully refreshed');
} else {
alert('Token is still valid');
}
}).catch(function() {
alert('Failed to refresh the token, or the session has expired');
});
https://stackoverflow.com/questions/64590194
复制相似问题