Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS身份验证不工作,重定向到登录页面失败_Javascript_Reactjs_Authentication_React Router_React Router V4 - Fatal编程技术网

Javascript ReactJS身份验证不工作,重定向到登录页面失败

Javascript ReactJS身份验证不工作,重定向到登录页面失败,javascript,reactjs,authentication,react-router,react-router-v4,Javascript,Reactjs,Authentication,React Router,React Router V4,我在react项目中实现了私有路由,但没有找到导致身份验证失败的错误。重定向不起作用,调试未进入函数estaAutenticado 令牌是从会话存储中检索到的常量 endpoint/usuario从JWT令牌进行验证 index.js import React from 'react'; import ReactDOM from 'react-dom'; import Routes from './servicos/Rotas'; ReactDOM.render(<Routes/>

我在react项目中实现了私有路由,但没有找到导致身份验证失败的错误。重定向不起作用,调试未进入函数estaAutenticado

令牌是从会话存储中检索到的常量

endpoint/usuario从JWT令牌进行验证

index.js

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

ReactDOM.render(<Routes/>, document.getElementById('root'));
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;
任何帮助,请!!!谢谢

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
}
{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}/>
          ))}
{rotas.map((e)=>(
e、 二等兵
))}
应该是

try {
 result = await API.post('/usuario')
 return result
} catch(e) {
 return false
}
{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?:
))}

如果它是私有的,那么呈现私有路由。

props=>estaAutenticado()没有像您期望的那样工作。当React调用它时,它将返回一个挂起的承诺(因此将始终呈现组件,而不是路由)。。。我不熟悉js/react,Promises/Await/Async对我来说是个新话题。从我快速阅读的内容来看,我需要使用一个新函数来管理estaAutenticado响应,这将是我的承诺?感谢您的回答,这打开了我的思路。这正是我要建议的!