Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 使用React上下文的用户身份验证_Reactjs - Fatal编程技术网

Reactjs 使用React上下文的用户身份验证

Reactjs 使用React上下文的用户身份验证,reactjs,Reactjs,我不知道这为什么不起作用。当调用login函数时,除了行user=res.headers['access-token']之外,其他一切都正常工作用户保持未定义状态。我的身份验证系统基于以下内容: 从“React”导入React; 从“axios”导入axios; const AuthContext=React.createContext(); 常量url=http://localhost:3001/auth/sign_in'; 函数AuthProvider(道具){ 让用户; 异步函数登录(电子

我不知道这为什么不起作用。当调用
login
函数时,除了行
user=res.headers['access-token']之外,其他一切都正常工作<代码>用户
保持未定义状态。我的身份验证系统基于以下内容:

从“React”导入React;
从“axios”导入axios;
const AuthContext=React.createContext();
常量url=http://localhost:3001/auth/sign_in';
函数AuthProvider(道具){
让用户;
异步函数登录(电子邮件、密码){
e、 预防默认值();
试一试{
const res=等待axios({
方法:“post”,
url:url,
数据:JSON.stringify({email,password}),
标题:{'Content-Type':'application/json'}
});
setItem('token',res.headers['access-token']);
setItem('client',res.headers['client']);
setItem('uid',res.headers['uid']);
user=res.headers['access-token'];
console.log(“登录”);
}捕捉(错误){
控制台日志(err);
}
}
返回(
);
}
const useAuth=()=>React.useContext(AuthContext);
导出{AuthProvider,useAuth};

事实证明,我所需要做的就是使用
useState

function AuthProvider(props) {
  const [user, setUser] = useState();

  async function login(e, email, password) {
    e.preventDefault();
    try {
      const res = await axios({
        method: 'post',
        url: url,
        data: JSON.stringify({ email, password }),
        headers: { 'Content-Type': 'application/json' }
      });
      localStorage.setItem('token', res.headers['access-token']);
      localStorage.setItem('client', res.headers['client']);
      localStorage.setItem('uid', res.headers['uid']);
      setUser(res.headers['access-token']);
      console.log('Logged in');
    } catch (err) {
      console.log(err);
    }
  }

  return (
    <AuthContext.Provider
      value={{ user, login, logout, register }}
      {...props}
    />
  );
}
函数AuthProvider(道具){
const[user,setUser]=useState();
异步函数登录(电子邮件、密码){
e、 预防默认值();
试一试{
const res=等待axios({
方法:“post”,
url:url,
数据:JSON.stringify({email,password}),
标题:{'Content-Type':'application/json'}
});
setItem('token',res.headers['access-token']);
setItem('client',res.headers['client']);
setItem('uid',res.headers['uid']);
setUser(res.headers['access-token']);
console.log(“登录”);
}捕捉(错误){
控制台日志(err);
}
}
返回(
);
}
function AuthProvider(props) {
  const [user, setUser] = useState();

  async function login(e, email, password) {
    e.preventDefault();
    try {
      const res = await axios({
        method: 'post',
        url: url,
        data: JSON.stringify({ email, password }),
        headers: { 'Content-Type': 'application/json' }
      });
      localStorage.setItem('token', res.headers['access-token']);
      localStorage.setItem('client', res.headers['client']);
      localStorage.setItem('uid', res.headers['uid']);
      setUser(res.headers['access-token']);
      console.log('Logged in');
    } catch (err) {
      console.log(err);
    }
  }

  return (
    <AuthContext.Provider
      value={{ user, login, logout, register }}
      {...props}
    />
  );
}