首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在我刚刚登录到Keycloak auth pag之后,keycloak会导致在react应用程序中的循环。登录后重定向时的无限循环

在我刚刚登录到Keycloak auth pag之后,keycloak会导致在react应用程序中的循环。登录后重定向时的无限循环
EN

Stack Overflow用户
提问于 2022-06-01 07:12:17
回答 2查看 1.5K关注 0票数 0

我是使用@react-keycloak/web的反应应用程序安全使用钥匙斗篷。我最近开始使用带有React的KeyCloak。我的KeyCloak码头在8080端口上运行,我的React应用程序在3000上运行。

当我尝试登录时,地址栏开始跳转,一些不同的令牌出现在url中。

App.js

代码语言:javascript
运行
复制
import React from "react";
import { ReactKeycloakProvider } from "@react-keycloak/web";
import keycloak from "./Keycloak"
import { BrowserRouter, Route, Routes } from "react-router-dom";
import Nav from "./components/Nav";
import WelcomePage from "./pages/Homepage";
import SecuredPage from "./pages/Securedpage";
import PrivateRoute from "./helpers/PrivateRoute";

function App() {
 return (
   <div>
     <ReactKeycloakProvider authClient={keycloak}>
       <Nav />
       <BrowserRouter>
         <Routes>
           <Route exact path="/" element={<WelcomePage />} />
           <Route path="/secured" element={<PrivateRoute>
                                            <SecuredPage />
                                          </PrivateRoute>} />
         </Routes>
       </BrowserRouter>
       </ReactKeycloakProvider>
   </div>
 );
}
export default App;

Nav.js

代码语言:javascript
运行
复制
import React from "react";
import { useKeycloak } from "@react-keycloak/web";

const Nav = () => {
 const { keycloak, initialized } = useKeycloak();

 return (
   <div>
     <div className="top-0 w-full flex flex-wrap">
       <section className="x-auto">
         <nav className="flex justify-between bg-gray-200 text-blue-800 w-screen">
           <div className="px-5 xl:px-12 py-6 flex w-full items-center">
             <h1 className="text-3xl font-bold font-heading">
               Keycloak React AUTH.
             </h1>
             <ul className="hidden md:flex px-4 mx-auto font-semibold font-heading space-x-12">
               <li>
                 <a className="hover:text-blue-800" href="/">
                   Home
                 </a>
               </li>
               <li>
                 <a className="hover:text-blue-800" href="/secured">
                   Secured Page
                 </a>
               </li>
             </ul>
             <div className="hidden xl:flex items-center space-x-5">
               <div className="hover:text-gray-200">
                 {!keycloak.authenticated && (
                   <button
                     type="button"
                     className="text-blue-800"
                     onClick={() => keycloak.login()}
                   >
                     Login
                   </button>
                 )}

                 {!!keycloak.authenticated && (
                   <button
                     type="button"
                     className="text-blue-800"
                     onClick={() => keycloak.logout()}
                   >
                     Logout ({keycloak.tokenParsed.preferred_username})
                   </button>
                 )}
               </div>
             </div>
           </div>
         </nav>
       </section>
     </div>
   </div>
 );
};

export default Nav;

Keycloak.js

代码语言:javascript
运行
复制
import Keycloak from "keycloak-js";
const keycloak = new Keycloak({
 url: "http://localhost:8080/auth",
 realm: "keycloak-react-auth",
 clientId: "React-auth",
});

export default keycloak;
EN

回答 2

Stack Overflow用户

发布于 2022-06-20 14:56:01

我认为您所面临的问题在这里得到了讨论和回答:https://github.com/react-keycloak/react-keycloak/issues/93

现在,从<React.StrictMode>中删除index.js应该可以修复它。如果您希望保留严格的模式,请将StrictMode放在ReactKeycloakProvider中。

票数 1
EN

Stack Overflow用户

发布于 2022-10-25 15:38:49

删除<React.StrictMode>并不能解决问题。

这个问题与React keycloak如何验证发布的令牌是否是revoked.For有关,后者试图加载和验证大多数现代浏览器阻止的特定i帧。

要解决这个问题,您可以选择:

  • 使用onLoad:"check-sso“,silentCheckSsoRedirectUri: window.location.origin +”/静默-check-sso.html“,
  • 使用checkLoginIframe:false (尽管该选项更激进),App.js中的代码将如下所示:

代码语言:javascript
运行
复制
     import React from "react";
        import { ReactKeycloakProvider } from "@react-keycloak/web";
        import keycloak from "./Keycloak"
        import { BrowserRouter, Route, Routes } from "react-router-dom";
        import Nav from "./components/Nav";
        import WelcomePage from "./pages/Homepage";
        import SecuredPage from "./pages/Securedpage";
        import PrivateRoute from "./helpers/PrivateRoute";
    
        function App() {
         return (
           <div>
             <ReactKeycloakProvider authClient={keycloak} initOptions={{
          checkLoginIframe: false,
            }}>
           <Nav />
               <BrowserRouter>
             <Routes>
               <Route exact path="/" element={<WelcomePage />} />
               <Route path="/secured" element={<PrivateRoute>
                                                <SecuredPage />
                                              </PrivateRoute>} />
             </Routes>
           </BrowserRouter>
           </ReactKeycloakProvider>
       </div>
     );
    }
    export default App;

这将使您的auth在所有浏览器上工作。

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

https://stackoverflow.com/questions/72457689

复制
相关文章

相似问题

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