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

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

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

【问题讨论】:

    标签: react-admin


    【解决方案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://stackoverflow.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 上的任何地方都有自定义路由,它会像往常一样工作
    猜你喜欢
    • 2019-02-20
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多