我不确定为什么这不起作用。调用login
函数时,除行user = res.headers['access-token'];
外,其他所有东西都起作用。 user
仍未定义。我的身份验证系统基于以下内容:https://kentcdodds.com/blog/authentication-in-react-applications
import React from 'react';
import axios from 'axios';
const AuthContext = React.createContext();
const url = 'http://localhost:3001/auth/sign_in';
function AuthProvider(props) {
let user;
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']);
user = res.headers['access-token'];
console.log('Logged in');
} catch (err) {
console.log(err);
}
}
return (
<AuthContext.Provider
value={{ user, login, logout, register }}
{...props}
/>
);
}
const useAuth = () => React.useContext(AuthContext);
export { AuthProvider, useAuth };
答案 0 :(得分:1)
原来我要做的就是使用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}
/>
);
}
答案 1 :(得分:0)
这是因为要检索令牌,您需要使用getItem()函数。
因此,根据您的情况,而不是:
user = res.headers['access-token'];
您将需要通过以下方式检索值:
user = localStorage.getItem('token')
尝试一下,让我知道它是否可以按您的要求工作。