问题描述
我正在尝试将 React 管理应用程序与 OIDC 集成。从带有代码 (http://react.admin:3000/redirect?code=3d88b9c9-fb31-4165-bad3-28905fddeae2&state=ca3b7d0e0d6d4151ba5a5eb9890c4415) 的身份验证服务器返回时,我会转到重定向页面(我在 Customroutes 中定义了该页面)。这个页面/组件如下:
export default () => {
const query = new URLSearchParams(useLocation().search);
const code = query.get('code');
const state = query.get('state');
const credentials = { code,state }
const login = useLogin();
login(credentials);
return(
<Box textAlign='center' paddingTop={5}>
Login in ...
</Box>
); ;
}
使用 React Admin 的 useLogin 钩子,它应该执行我在 authProvider 中定义的以下代码:
login: (credentials = {}) => {
if ( credentials.code ) {
userManager.signinRedirectCallback().then(() => {
userManager.getUser().then((user) => {
localStorage.setItem('auth',JSON.stringify({firstname: user.profile.name,lastname: user.profile.family_name}));
return Promise.resolve();
}).catch(() => { return Promise.reject() });
}).catch(() => { return Promise.reject() });
}
当我将 UserManager 日志切换到调试模式时,我看到正在调用 signinRedirectCallback 和 getUser。但是,在执行 UserManager 函数之前,我的 UI 会显示一条错误消息,说明:
TypeError: authProvider.login(...) is undefined
引用“登录(凭据);”这一行在 LoginRedirect 页面中...
我真的很难找到原因:
- 为什么我的 LoginRedirect 页面中没有显示消息“登录 ...”
- 为什么它声明 authProvider.login 函数是未定义的,因为它调用了其中的 userManager 函数......
欢迎任何建议......
非常感谢 - C
更正 - 4 月 22 日 我终于找到了问题所在。它需要返回一个承诺,因此它的工作原理如下:
if ( credentials.code ) {
return userManager.signinRedirectCallback().
then(result => userManager.getUser(result)).
then (user => {
localStorage.setItem('auth',lastname: user.profile.family_name}));
}).then(result => Promise.resolve()).catch(result => Promise.reject());
}
在组件页面中:
login(credentials).then(()=>{return}).catch(()=>{return});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)