微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React admin authProvider.login 未定义

如何解决React admin authProvider.login 未定义

我正在尝试将 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 页面中...

我真的很难找到原因:

  1. 为什么我的 LoginRedirect 页面中没有显示消息“登录 ...”
  2. 为什么它声明 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 举报,一经查实,本站将立刻删除。