我正在尝试为我的React Admin应用程序配置登录页面。根据文档,我使用的是authProvider
和LoginPage
组件,我的登录过程通常正常。
我让应用程序在3000端口本地运行。但当我去http://localhost:3000,我被自动重定向到http://localhost:3000/#/login.
具体是什么推动了重定向?我没有具体说明/#/应用程序内部的登录url。
我使用的是旧版本的React Admin(2.9(,我知道它使用了Redux。重定向到/#/登录Redux的功能?还是React Admin本身?
我的理解是,我可能可以使用HashHistory或BrowserHistory来阻止#,但不确定这是否与React Admin兼容。
我遇到的实际问题是,一旦我将应用程序部署到我的域,登录过程的行为与我在localhost上运行时不同——这使得部署前测试变得困难。
也就是说,http://localhost:3000和http://localhost:3000/#/login两者都允许我成功登录。但当我部署到我的域时,http://www.example.com允许我登录,同时http://www.example.com/#/login没有。
知道为什么会这样吗?我可以将React Admin应用程序配置为而不是重新路由到http://www.example.com/#/login?
"如果promise被拒绝,react admin默认重定向到/login页面。您可以覆盖checkAuth((中重定向用户的位置,方法是拒绝具有redirectTo属性的对象:">
React admuin 2.9:https://marmelab.com/react-admin/doc/2.9/Authentication.html#checking-导航期间的凭证
// in src/authProvider.js (React-admin 2.9)
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin';
export default (type, params) => {
if (type === AUTH_LOGIN) {
// ...
}
if (type === AUTH_LOGOUT) {
// ...
}
if (type === AUTH_ERROR) {
// ...
}
if (type === AUTH_CHECK) {
return localStorage.getItem('token') ? Promise.resolve() : Promise.reject({ redirectTo: '/no-access' });
}
return Promise.reject('Unknown method');
};
React管理员4.3:https://marmelab.com/react-admin/AuthProviderWriting.html
// in src/authProvider.js
export default {
login: ({ username, password }) => { /* ... */ },
checkError: (error) => { /* ... */ },
checkAuth: () => localStorage.getItem('auth')
? Promise.resolve()
: Promise.reject({ redirectTo: '/no-access' }),
// ...
}