首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react中的onelogin令牌刷新

react中的onelogin令牌刷新
EN

Stack Overflow用户
提问于 2018-05-06 23:24:43
回答 2查看 2.5K关注 0票数 0

我一直在尝试使用oidc-client库实现令牌刷新,但没有取得什么成功。任何帮助或洞察力都是非常感谢的。

堆叠:

  • 反应
  • GraphQL (阿波罗客户)

结构:

我尝试了几种方法,从automaticSilentRenew开始,在我的public/文件夹中创建一个static-renew.html回调文件--但是这两种方法都给了我一个No state in response错误,所以我开始了一个解决办法。

解决办法:

我正在将路由器包装在一个组件中,该组件执行以下操作:

  • 在挂载时,它调用oidc-client.getUser(),然后添加以下侦听器:
代码语言:javascript
复制
- `oidcMgr.events.addAccessTokenExpiring(handleTokenExpiring)`
- `window.addEventListener('message', this.handleSilentRenew)`

  • addAccessTokenExpiring事件第一次触发时,它调用一个函数:oidcMgr.createSigninRequest({ redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URI }),并使用apollo-link-state将响应设置为本地状态。
  • 当阿波罗链接状态中有一个iFrame时(从上面的函数)呈现tokenURI。
  • 当组件卸载时,它会移除两个侦听器。
  • 当命中回调URL时,它会挂载一个组件,该组件使用源silent-renew发布消息,以便步骤1中挂载的侦听器可以在apollo-link-state中将令牌URI设置为'',从而终止iframe并再次调用getUser

这可用于刷新令牌,但iFrame似乎正在将整个应用程序加载到其中,然后终止,从而导致应用程序消耗超过必要的资源。

是否有另一种更直接的方法来使用这个库来刷新React应用程序中的令牌?任何帮助或观点都将受到极大的感谢。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2018-05-08 05:50:18

这可能会让你在你使用的方法上有一些提示,

我使用了一些不同的方法来激发silentRenw,而不是使用

automaticSilentRenew:真,

我决定显式调用signInSilent();。做I的原因是由于automaticSilentRenew所面临的一些问题:是的,没有像预期的那样工作。

我在实现我的接口的UserAuth类构造函数中初始化了事件和方法

代码语言:javascript
复制
constructor(private oidcSettings: CoreApi.Interfaces.Authentication.OpenIDConnectionSettings)
{
 this.userManager.events.addAccessTokenExpiring(() =>
         {
            this.userManager.signinSilent({scope: oidcSettings.scope, response_type: oidcSettings.response_type})
                    .then((user: Oidc.User) =>
                    {
                        this.handleUser(user);
                    })
                    .catch((error: Error) =>
                    {
                       //Work around to handle to Iframe window timeout errors on browsers
                        this.userManager.getUser()
                            .then((user: Oidc.User) =>
                            {
                                this.handleUser(user);
                            });
                    });
            });
}

当handleUser被选中时,您只需查看登录用户。

因此,如果在构造函数中初始化signInSilent进程,然后调用signInSilent完成,即回调,它可能会工作。

票数 0
EN

Stack Overflow用户

发布于 2018-06-02 15:06:22

您的静态更新. has有什么?它通常应该加载、oidc-client js和一个处理signinCallback的函数,一旦回调中的标志处理得很好,它就会发出一个事件UserLoaded,这就是您的父程序需要更新用户对象(access_token,id_token)的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50205407

复制
相关文章

相似问题

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