在 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 中成功认证后如何重定向到其他路由的主要内容,如果未能解决你的问题,请参考以下文章