Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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
Reactjs 因此,它可以工作,但很容易被欺骗。除非我遗漏了什么?json web令牌就是这样工作的,对于您发出的每一个请求,您都会将头中的令牌发送到API,API会再次验证令牌。因此,即使有人修改了令牌,他们也无法访问不应该访问的内容。你可以检查大多数网站的本地存储,_Reactjs_React Router - Fatal编程技术网

Reactjs 因此,它可以工作,但很容易被欺骗。除非我遗漏了什么?json web令牌就是这样工作的,对于您发出的每一个请求,您都会将头中的令牌发送到API,API会再次验证令牌。因此,即使有人修改了令牌,他们也无法访问不应该访问的内容。你可以检查大多数网站的本地存储,

Reactjs 因此,它可以工作,但很容易被欺骗。除非我遗漏了什么?json web令牌就是这样工作的,对于您发出的每一个请求,您都会将头中的令牌发送到API,API会再次验证令牌。因此,即使有人修改了令牌,他们也无法访问不应该访问的内容。你可以检查大多数网站的本地存储,,reactjs,react-router,Reactjs,React Router,因此,它可以工作,但很容易被欺骗。除非我遗漏了什么?json web令牌就是这样工作的,对于您发出的每一个请求,您都会将头中的令牌发送到API,API会再次验证令牌。因此,即使有人修改了令牌,他们也无法访问不应该访问的内容。你可以检查大多数网站的本地存储,他们也这样存储。此外,在redux的早期,任何使用redux开发工具的人都可以完全看到该商店。我已经实现了您的代码,但当我尝试进入管理员/仪表板时,即使在登录并确认令牌在本地存储中,它仍会将我发送回登录页面…@user8463989您的Auth


因此,它可以工作,但很容易被欺骗。除非我遗漏了什么?json web令牌就是这样工作的,对于您发出的每一个请求,您都会将头中的令牌发送到API,API会再次验证令牌。因此,即使有人修改了令牌,他们也无法访问不应该访问的内容。你可以检查大多数网站的本地存储,他们也这样存储。此外,在redux的早期,任何使用redux开发工具的人都可以完全看到该商店。我已经实现了您的代码,但当我尝试进入管理员/仪表板时,即使在登录并确认令牌在本地存储中,它仍会将我发送回登录页面…@user8463989您的
AuthContext.Provider
如何计算它提供的值?当您进行身份验证/登录时,如何更新上下文值?下面是我在回答一个类似的身份验证问题时创建的。我要注意上下文状态和值提供了一个回调来更新该状态。如果您使用的是localstorage,那么您可能需要正确地“侦听”应用程序何时更新它[localstorage],以便上下文值可以更新。很抱歉,响应延迟。我已经更新了我的问题并添加了Auth钩子。希望能有帮助?谢谢你的帮助。我已经实现了您的代码,但当我尝试进入管理员/仪表板时,即使在登录并确认令牌在本地存储中,它仍会将我发送回登录页面…@user8463989您的
AuthContext.Provider
如何计算它提供的值?当您进行身份验证/登录时,如何更新上下文值?下面是我在回答一个类似的身份验证问题时创建的。我要注意上下文状态和值提供了一个回调来更新该状态。如果您使用的是localstorage,那么您可能需要正确地“侦听”应用程序何时更新它[localstorage],以便上下文值可以更新。很抱歉,响应延迟。我已经更新了我的问题并添加了Auth钩子。希望能有帮助?
import { createContext } from "react";

export const AuthContext = createContext({
  isLoggedIn: false,
  userId: null,
  token: null,
  login: () => {},
  logout: () => {},
});
      <AuthContext.Provider
        value={{
          isLoggedIn: !!token,
          token: token,
          userId: userId,
          login: login,
        }}
      >
<Router>
// Routes here
</Router>
</AuthContext.Provider>
import { useState, useCallback, useEffect } from "react";

export const useAuth = () => {
  const [token, setToken] = useState(false);
  const [userId, setUserId] = useState(false);

  const login = useCallback((userId, token) => {
    setToken(token);
    setUserId(userId);
    localStorage.setItem(
      "userData",
      JSON.stringify({
        userId: userId,
        token: token,
      })
    );
  }, []);

  useEffect(() => {
    const storedData = JSON.parse(localStorage.getItem("userData"));
    if (storedData && storedData.token) {
      login(storedData.userId, storedData.token);
    }
  }, [login]);

  return { token, login, userId };
};
console.log(auth.token);
import React, { useContext } from "react";
import { Route, Redirect } from "react-router-dom";
import { AuthContext } from "../shared/context/auth-context";

  const ProtectedRoute = ({ path, component: Component, render, ...rest }) => {
  const auth = useContext(AuthContext);
  console.log(auth.token);


  return (
    <Route
      {...rest}
      render={(props) => {
          if (!auth.token)
          return (
            <Redirect
              to={{
                pathname: "/admin/login",
                state: { from: props.location },
              }}
            />
          );
        return Component ? <Component {...props} /> : render(props);
      }}
    />
  );
};

export default ProtectedRoute;
import React, { useContext } from "react";
import { Route, Redirect } from "react-router-dom";
import { AuthContext } from "../shared/context/auth-context";

const ProtectedRoute = props => {
  const auth = useContext(AuthContext);
  console.log(auth.token);

  return auth.token ? (
    <Route {...props} />
  ) : (
    <Redirect
      to={{
        pathname: '/admin/login',
        state: { from: props.location },
      }}
    />
  );
};

export default ProtectedRoute;