Я использую фрэйм-админ, где при входе страница не перенаправляет на страницу списков. - PullRequest
0 голосов
/ 02 октября 2018

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

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

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

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

1 Ответ

0 голосов
/ 19 декабря 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...