我正在使用 react-admin 框架,其中登录页面不会重定向到列表页面
I'm using react-admin framework where on login the page doesn't redirect to the lists page
而是在控制台上显示。
警告:哈希历史不能 PUSH 相同的路径;新条目将不会添加到历史堆栈
成功登录后重定向不起作用。有时它在 chrome 上工作,有时它不工作,在 firefox 上它根本不工作。
我不明白是什么问题。
我的App.js代码
class 应用扩展组件 {
render() {
return (
<Admin
loginPage={LoginPage}
{...this.props}
authProvider={AuthProvider}
dataProvider={dataProvider}
dashboard={Dashboard}>
{permissions => [
<Resource name="client"
options={{ label: 'Client' }}
list={ClientList}
show={Client}
edit={ClientEdit}
create={ClientCreate} />,
<Resource name="phone" />,
permissions === 'admin' ?
<Resource name="user" /> : null
]}
</Admin>
);
}
}
和我的 AuthProvider
if (type === AUTH_LOGIN) {
const { username, password } = params;
const request = new Request('http://localhost:5000/login', {
method: 'POST',
body: JSON.stringify({ username, password }),
headers: new Headers({ 'Content-Type': 'application/json' })
});
return fetch(request)
.then((response) => {
if (response.status < 200 || response.status >= 300) {
throw new Error(response.statusText);
}
response.json()
.then(({ user, token }) => {
const decodedToken = decodeJwt(token)
localStorage.setItem('token', token);
localStorage.setItem('role', decodedToken.role);
return Promise.resolve();
});
})
}
if (type === AUTH_LOGOUT) {
localStorage.removeItem('token');
localStorage.removeItem('role');
return Promise.resolve();
}
if (type === AUTH_ERROR) {
const { status } = params
console.log(params);
if (status === 401 || status === 403) {
localStorage.removeItem('token');
localStorage.removeItem('role');
return Promise.reject()
}
return Promise.resolve()
}
if (type === AUTH_CHECK) {
return localStorage.getItem('token') ? Promise.resolve() : Promise.reject({ redirectTo: '/login' });
}
if (type === AUTH_GET_PERMISSIONS) {
const role = localStorage.getItem('role');
return role ? Promise.resolve(role) : Promise.reject();
}
我来晚了,所以你可能已经明白了。但我认为你错了,你没有 return 中间嵌套的承诺。
所以,return response.json()
可能会修复它。发生的事情是它 returning 一个没有 return 任何东西的承诺,但包含一个解决和 returns 的承诺。所以最外层的 promise 没有 returning 就完成了。
而是在控制台上显示。 警告:哈希历史不能 PUSH 相同的路径;新条目将不会添加到历史堆栈
成功登录后重定向不起作用。有时它在 chrome 上工作,有时它不工作,在 firefox 上它根本不工作。 我不明白是什么问题。
我的App.js代码 class 应用扩展组件 {
render() {
return (
<Admin
loginPage={LoginPage}
{...this.props}
authProvider={AuthProvider}
dataProvider={dataProvider}
dashboard={Dashboard}>
{permissions => [
<Resource name="client"
options={{ label: 'Client' }}
list={ClientList}
show={Client}
edit={ClientEdit}
create={ClientCreate} />,
<Resource name="phone" />,
permissions === 'admin' ?
<Resource name="user" /> : null
]}
</Admin>
);
}
}
和我的 AuthProvider
if (type === AUTH_LOGIN) {
const { username, password } = params;
const request = new Request('http://localhost:5000/login', {
method: 'POST',
body: JSON.stringify({ username, password }),
headers: new Headers({ 'Content-Type': 'application/json' })
});
return fetch(request)
.then((response) => {
if (response.status < 200 || response.status >= 300) {
throw new Error(response.statusText);
}
response.json()
.then(({ user, token }) => {
const decodedToken = decodeJwt(token)
localStorage.setItem('token', token);
localStorage.setItem('role', decodedToken.role);
return Promise.resolve();
});
})
}
if (type === AUTH_LOGOUT) {
localStorage.removeItem('token');
localStorage.removeItem('role');
return Promise.resolve();
}
if (type === AUTH_ERROR) {
const { status } = params
console.log(params);
if (status === 401 || status === 403) {
localStorage.removeItem('token');
localStorage.removeItem('role');
return Promise.reject()
}
return Promise.resolve()
}
if (type === AUTH_CHECK) {
return localStorage.getItem('token') ? Promise.resolve() : Promise.reject({ redirectTo: '/login' });
}
if (type === AUTH_GET_PERMISSIONS) {
const role = localStorage.getItem('role');
return role ? Promise.resolve(role) : Promise.reject();
}
我来晚了,所以你可能已经明白了。但我认为你错了,你没有 return 中间嵌套的承诺。
所以,return response.json()
可能会修复它。发生的事情是它 returning 一个没有 return 任何东西的承诺,但包含一个解决和 returns 的承诺。所以最外层的 promise 没有 returning 就完成了。