首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自动更新令牌以保持会话活动,使用角度9的密钥斗篷?

如何自动更新令牌以保持会话活动,使用角度9的密钥斗篷?
EN

Stack Overflow用户
提问于 2020-10-29 11:27:01
回答 2查看 5K关注 0票数 4

我正在使用插件“钥匙斗篷-角”

版本:

代码语言:javascript
运行
复制
"keycloak-angular": "8.0.1",
"keycloak-js": "11.0.2",
angular : 9.1.12

我已将“访问令牌寿命”设置为1分钟。当访问令牌过期时,我试图通过使用Keycloak.isTokenExpired()来更新令牌。它可以工作,但我面临的问题是,有时这个函数会被调用,而大多数时候它不会被调用。每当访问令牌过期时,我想要实现的是->,我想更新令牌,保持用户登录。试图在互联网上找到这个问题,但却找不到类似的东西。

代码语言:javascript
运行
复制
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中。

从网络标签上得到这个-

代码语言:javascript
运行
复制
expires_in: 60
refresh_expires_in: 1800

主模块文件中提供程序的截图。主模块中的提供程序

新事物,如果有疑问或者我留下了什么东西,请道歉。

EN

回答 2

Stack Overflow用户

发布于 2020-11-02 05:38:22

(刷新)只有在令牌未过期时才返回false。因此,当令牌尚未过期时,您将尝试刷新它。

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

代码语言:javascript
运行
复制
    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());
            });
            }
票数 1
EN

Stack Overflow用户

发布于 2022-11-15 13:04:07

对于Keycloack版本19使用,

代码语言:javascript
运行
复制
    _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');
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64590194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档