ReactJS аутентификация не работает, перенаправление на страницу входа не удается - PullRequest
0 голосов
/ 11 июля 2019

Я реализовал частные маршруты в реактивном проекте, но я не нашел ошибку, которая приводит к сбою аутентификации.Перенаправление не работает, отладка не входит в функцию estaAutenticado.

Токен является константой, полученной из sessionStorage.

Конечная точка / стандартное приложение выполняет проверку из токена JWT.

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './servicos/Rotas';

ReactDOM.render(<Routes/>, document.getElementById('root'));

Rotas.js

import React from "react";
import { BrowserRouter, Route, Switch, Redirect } from "react-router-dom";
import { estaAutenticado } from "./Autenticacao";
import App from '../App';
import Login from '../Login';
import SelecionarFiliais from '../SelecionarFiliais';

export const rotas = [
  {
    path: "/login",
    name: "Login",
    icon: null,
    component: Login,
    private: false,
    exact: false
  },
  {
    path: "/selecionar_filiais",
    name: "Login",
    icon: null,
    component: SelecionarFiliais,
    private: true,
    exact: false
  },
  {
    path: "/",
    name: "Dashboard",
    icon: null,
    component: App,
    private: true,
    exact: true
  }
];

const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route
    {...rest} render={props =>
        estaAutenticado() ? (
        <Component {...props} />
      ) : (
        <Redirect to={{ pathname: "/login", state: { from: props.location } }} />
      )
    }
  />
);

const Routes = () => (
    <BrowserRouter>
        <Switch>
          {rotas.map((e) => (
            e.private ? <Route key={e.path} exact={e.exact} path={e.path} component={e.component}/> : <PrivateRoute key={e.path} exact={e.exact} path={e.path} component={e.component}/>
          ))}
        </Switch>
    </BrowserRouter>
);

export default Routes;

функция estaAutenticado ()

export const estaAutenticado = async () => {
    let result = false
    if (token !== null){
        result = await API.post('/usuario')
        .then(function(response) {
            return true
        })
        .catch(function(error){
            return false
        });
        return result
    }
    return result
};

Любая помощь, пожалуйста!Спасибо

1 Ответ

2 голосов
/ 11 июля 2019
result = await API.post('/usuario')
        .then(function(response) {
            return true
        })
        .catch(function(error){
            return false
        });
        return result

Должно быть

try {
 result = await API.post('/usuario')
 return result
} catch(e) {
 return false
}

Edit:

Также ваше отображение, если функция инвертирована:

{rotas.map((e) => (
            e.private ? <Route key={e.path} exact={e.exact} path={e.path} component={e.component}/> : <PrivateRoute key={e.path} exact={e.exact} path={e.path} component={e.component}/>
          ))}

Должно быть

{rotas.map((e) => (
            !e.private ? <Route key={e.path} exact={e.exact} path={e.path} component={e.component}/> : <PrivateRoute key={e.path} exact={e.exact} path={e.path} component={e.component}/>
          ))}

Если это личное, то сделайте PrivateRoute.

...