我正在使用 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 就完成了。