首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每次刷新页面时避免密钥披风回调过程

每次刷新页面时避免密钥披风回调过程
EN

Stack Overflow用户
提问于 2020-12-07 13:48:38
回答 3查看 3.6K关注 0票数 5

在我的react应用程序中,我使用了keycloak作为身份提供者。我已经在使用npm的react应用程序中安装了keycloak react依赖项。

下面是依赖的键盘斗篷反应npm模块的版本:

@react keycloak/web“:"2.1.4",

“钥匙斗篷”:"^11.0.2",

我提供了键盘斗篷配置如下:

代码语言:javascript
运行
复制
const keycloak = new Keycloak({
  realm: "temp-local",
  url: " http://localhost:8090/auth/",
  clientId: "temp-local-client"
});

每次我刷新页面时,它都会使用查询参数statesession_statecode再次刷新(使用回调url)。

例如:当我转到页面:http://localhost:8080/test时,它会去那里,但是它会再次刷新页面下面的url。

样本url:http://localhost:8080/test#=45ert45-edac92ddbf2a&=45ga97bbfb4-f080cvb65e59b&=1a1a-4e6e-3fg578-4fg10b-bbafg8-652fg6c44727a4

如何避免钥匙斗篷刷新?有人知道这件事吗?

EN

回答 3

Stack Overflow用户

发布于 2020-12-07 14:12:13

同样的问题,对我来说,我是这样修正的:

在主要组成部分中:

代码语言:javascript
运行
复制
const App = () => {
    //here i'm using redux, btw i'm initializing this auth component
    useEffect(() => auth.init(store.dispatch), [])

第四部分:

代码语言:javascript
运行
复制
import Keycloak from 'keycloak-js';
const keycloak = Keycloak('/keycloak.json');
import axios from 'axios'
import { LocalStore } from '../utils/local_store.js'

const store_token = (token) => {
    axios.defaults.headers.Authorization = `Bearer ${token}`;
    LocalStore.set('token', token);
}

const auth = {
    init(dispatch) {


        keycloak.init({ onLoad: 'login-required', checkLoginIframe: false, }).then(() => {
            store_token(keycloak.token)
            dispatch(authenticateResponse(keycloak.token)).then(
                () => {
                   //auth logic
                }
            );

            //this is my fix
            setInterval(() => {
                keycloak.updateToken(70).then((refreshed) => {
                    if (refreshed) {
                        store_token(keycloak.token)
                        console.debug('Token refreshed');
                    } else {
                        console.warn('Token not refreshed');
                    }
                }).catch(() => {
                    console.error('Failed to refresh token');
                });
            }, 50000)

        }).catch(() => {
            console.error('Auth failed');
        });
    },
    keycloak() {
        return keycloak;
    }
}


export default auth;
票数 1
EN

Stack Overflow用户

发布于 2021-02-08 16:25:47

检查代码的其他部分是否在react路由器中进行重定向:我也遇到了同样的问题,但是在一个大型代码库中,其他错误(因为缺少令牌)导致内部重定向到登录路由。

票数 0
EN

Stack Overflow用户

发布于 2022-10-28 22:16:32

我也面对过这种情况,帮助我使用的是静默检查SSO:

  • index.html旁边添加一个名为silent-check-sso.html的文件,其内容如下:

代码语言:javascript
运行
复制
<html><body><script>parent.postMessage(location.href, location.origin)</script></body></html>

  • initOptions更新<ReactKeycloakProvider>

代码语言:javascript
运行
复制
    <ReactKeycloakProvider
      authClient={keycloak}
      initOptions={{
        onLoad: 'check-sso',
        silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html',
        pkceMethod: 'S256',
      }}
    >
    ...
    </ReactKeycloakProvider>

不幸的是,我不知道它如何工作的技术细节(欢迎解释评论),但它帮助了我:]这里是如何工作,而不对SSO进行沉默检查:

这就是无声检查SSO:

希望能帮上忙!

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

https://stackoverflow.com/questions/65182935

复制
相关文章

相似问题

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