在 react-admin 中成功认证后如何重定向到其他路由

Posted

技术标签:

【中文标题】在 react-admin 中成功认证后如何重定向到其他路由【英文标题】:How to redirect to some other route after successful authentication in react-admin 【发布时间】:2019-02-03 05:40:33 【问题描述】:

我一直在寻找在 react-admin 中成功认证后重定向到特定 url 的解决方案,

当我在 URL 上粘贴 http://localhost:1234/#/students/sdf2343afs32 时,如果已经登录,那么我会得到用户详细信息页面,但如果没有登录,并且在登录后它会显示主页

【问题讨论】:

【参考方案1】:

您可以在 authProvider 内登录后自定义重定向 URL,如文档的 Checking Credentials During Navigation 部分所述:

// in authProvider.js
import  AUTH_CHECK  from 'react-admin';

export default (type, params) => 
    // ../
    if (type === AUTH_CHECK) 
        return isLogged
            ? Promise.resolve( redirectTo: '/custom-url' )
            : Promise.reject( redirectTo: '/no-access' );
    
    // ...
;

【讨论】:

感谢您的回答,似乎 Promise.resolve( redirectTo: '/custom-url' ) 在我使用它重定向的拒绝时不起作用,或者我的代码中缺少任何内容? 我认为Promise.resolve( redirectTo: '/custom-url' ) 应该只是作为指导。 当然,您必须根据参数构建自己的 URL。 这个答案是错误的。 redirectTo 仅适用于注销,而不适用于原始问题所述的登录【参考方案2】:

基于 https://***.com/a/35715159/986160 使用 react-admin 2.6.2

对我有用的是这样的自定义仪表板(假设这是您的默认登录页面):

import React,  Component  from 'react';
import  Redirect  from 'react-router';
import Card from '@material-ui/core/Card';
import CardContent from '@material-ui/core/CardContent';
import CardHeader from '@material-ui/core/CardHeader';

export default class Dashboard extends Component 

    render() 
        if (localStorage.getItem("user_role") !== "special_role") 
            return <Card>
                <CardHeader title="Welcome to Dashboard" />
                <CardContent></CardContent>
            </Card>
        
        else 
            return (<Redirect to="/route/to/redirect" />);
        
    

【讨论】:

我想重定向到的 url 在构建时是未知的。他要求的是在登录后立即重定向到用户粘贴在地址栏上的任何 url。 这将永远无法工作,因为在浏览器中粘贴 url 将完全重新加载应用程序 完全重载有什么问题?完全重新加载后,应用程序应读取 url。如果未通过身份验证,则重定向到登录页面,登录后应重定向到它在开始时读取的 url。 @ThanasisIoannidis 在 url 复制粘贴 spa 再次启动然后使用路由器之后.. 您的仪表板位于“/dashboard”上,并且应该提前知道重定向路由 - 所以它不能是动态的特殊情况 - 当然,您可以在 react-router 上的任何地方都有自定义路由,它会像往常一样工作

以上是关于在 react-admin 中成功认证后如何重定向到其他路由的主要内容,如果未能解决你的问题,请参考以下文章

成功认证后的 Spring-SAML 无休止的重定向循环

使用 react-router-dom 成功认证后将用户重定向到他们请求的页面

认证后Spring安全重定向到静态资源

认证后开始执行方法

成功或错误后如何使用 redux thunk 重定向?

如果只有登录成功,如何重定向主页.react js node js with jwt