Я использую среду реагирования-администрирования, где при входе в систему страница не перенаправляется на страницу списков.

вместо этого он показывает это на консоли. Предупреждение: история хэшей не может PUSH по тому же пути; новая запись не будет добавлена ​​в стек истории

Перенаправление не работает после успешного входа. Иногда работает в хроме, иногда нет, а в фаерфоксе вообще не работает. Я не понимаю, в чем проблема.

Мой класс кода App.js Приложение расширяет компонент {

  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();
}

person Aman Chopra    schedule 02.10.2018    source источник


Ответы (1)


Я действительно опоздал к этому, так что вы, возможно, поняли это. Но я думаю, что вы ошибаетесь, так это то, что вы не возвращаете среднее вложенное обещание.

Итак, return response.json() может это исправить. Происходит то, что он возвращает обещание, которое ничего не возвращает, но содержит обещание, которое разрешается и возвращается. Таким образом, самое внешнее обещание просто завершается без возврата.

person FungalRaincloud    schedule 18.12.2018