React-admin не перенаправляет после входа в систему - PullRequest
1 голос
/ 31 октября 2019

У меня возникают проблемы при получении моей страницы входа, чтобы перенаправить меня на панель управления React Admin после успешного входа в систему

Мой authProvider.js выглядит так:

import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_CHECK, AUTH_ERROR } from 'react-admin';
import axios from 'axios';
import { print } from 'graphql';
import gql from 'graphql-tag';

import { httpUri } from './ServerUri';

import {
  setSessionCookie,
  getSessionCookie,
  flushCookie,
} from './SessionCookie';

const ADMIN_LOGIN = gql`
  mutation adminLogin($email: String!, $password: String!) {
    adminLogin(email: $email, password: $password) {
      administrator {
        id
      }
      token
    }
  }
`;

export default async (type, params) => {
  if (type === AUTH_LOGIN) {
    const { username, password } = params;
    axios
      .post(httpUri, {
        query: print(ADMIN_LOGIN),
        variables: {
          email: String(username),
          password: String(password),
        },
      })
      .then(res => {
        const { token } = res.data.data.adminLogin;
        if (token) {
          setSessionCookie(token);
        }
      })
      .catch(e => Promise.reject(e))
      .then(() => Promise.resolve())
  }

  if (type === AUTH_CHECK) {
    return getSessionCookie() ? Promise.resolve() : Promise.reject();
  }

....

  return Promise.resolve();
};

и мой sessionCookie.js выглядит следующим образом:

const SESSION_COOKIE_NAME = 'ADMIN-SESSION';
const DAYS_LIMIT = 1;

const getSessionCookie = () => {
  const match = `; ${document.cookie}`.match(
    `;\\s*${SESSION_COOKIE_NAME}=([^;]+)`
  );
  return match && match[1];
};

const setSessionCookie = value => {
  if (getSessionCookie()) {
    document.cookie = `${SESSION_COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
  }

  const date = new Date();
  date.setTime(date.getTime() + DAYS_LIMIT * 24 * 60 * 60 * 1000);
  const expires = `; expires=${date.toUTCString()}`;
  document.cookie = `${SESSION_COOKIE_NAME}=${value || ''}${expires}; path=/`;
  return document.cookie
};

const flushCookie = () => {
  const cookies = document.cookie.split(';');

  for (let i = 0; i < cookies.length; i++) {
    const cookie = cookies[i];
    const eqPos = cookie.indexOf('=');
    const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
    document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT`;
  }
};

export { getSessionCookie, setSessionCookie, flushCookie };

Мне кажется, что такое поведение странное, потому что когда я нажимаю на кнопку входа в систему, я вижу, что файл cookie устанавливается . Но React-Admin остается на странице входа. Если я нажму второй раз, я попаду на панель управления : /

У кого-нибудь есть идеи? Есть ли вероятность того, что я не получу cookie синхронно, что предотвратит первую загрузку?

...