JWT:未直接访问服务器 (localhost:3001/login) 时未设置 Cookie (MERN)
JWT: Cookies not being set when server (localhost:3001/login) is not accessed directly (MERN)
所以我正在尝试创建一个用于身份验证的令牌。
场景一:
当我直接访问我的本地服务器时 localhost:3001/login 我能够 update/set cookies。这是我的代码片段:
app.get('/login', async (req, res) => {
const run_query = (username, password) => {
UserModel.findOne({ username:username }, (e, obj) => {
if(obj === null)
res.send('no user')
else if(e)
res.send(obj)
else {
bcrypt.compare(password, obj.password, function(e, resp) {
if(resp) {
const accessToken = createTokens(obj)
res.cookie(`access-token`, accessToken);
res.send(obj)
}
else
res.send('wrong password')
})
}
})
}
run_query(req.body.username, req.body.password)
})
场景二:
当我尝试通过 axios.get 访问 localhost:3001/login 时单击按钮(React),我能够 运行 我的查询成功并发送用户的 obj 数据,但它没有设置 cookie。
以下是我通过 React 访问 /login 的方式:
const login = async () => {
try {
const res = await axios.get('http://localhost:3001/login', {
username: username,
password: password
})
const loginTrue = (res) => {
setLogged(true)
console.log(res)
}
res.data === 'wrong password' ? alert('Wrong Password')
: res.data === 'no user' ? alert('Username not Found')
: res.data === 'empty' ? alert('Please Fill up all fields')
: res.data._id !== undefined && res.data._id !== '' ? loginTrue(res.data)
: alert('Error: ' + res.data.Error)
} catch (e) {
console.log(e)
}
}
问题:
- 为什么我只能在直接访问 localhost:3001/login 时更新我的 cookie?
我一定是漏掉了什么或者做错了什么。谢谢!
this thread 关于 cookie 本身的工作方式以及 Axios 如何处理它们。根据您的环境,有几项可能会起作用,所以我不会重复它。
所以我正在尝试创建一个用于身份验证的令牌。
场景一: 当我直接访问我的本地服务器时 localhost:3001/login 我能够 update/set cookies。这是我的代码片段:
app.get('/login', async (req, res) => {
const run_query = (username, password) => {
UserModel.findOne({ username:username }, (e, obj) => {
if(obj === null)
res.send('no user')
else if(e)
res.send(obj)
else {
bcrypt.compare(password, obj.password, function(e, resp) {
if(resp) {
const accessToken = createTokens(obj)
res.cookie(`access-token`, accessToken);
res.send(obj)
}
else
res.send('wrong password')
})
}
})
}
run_query(req.body.username, req.body.password)
})
场景二: 当我尝试通过 axios.get 访问 localhost:3001/login 时单击按钮(React),我能够 运行 我的查询成功并发送用户的 obj 数据,但它没有设置 cookie。
以下是我通过 React 访问 /login 的方式:
const login = async () => {
try {
const res = await axios.get('http://localhost:3001/login', {
username: username,
password: password
})
const loginTrue = (res) => {
setLogged(true)
console.log(res)
}
res.data === 'wrong password' ? alert('Wrong Password')
: res.data === 'no user' ? alert('Username not Found')
: res.data === 'empty' ? alert('Please Fill up all fields')
: res.data._id !== undefined && res.data._id !== '' ? loginTrue(res.data)
: alert('Error: ' + res.data.Error)
} catch (e) {
console.log(e)
}
}
问题:
- 为什么我只能在直接访问 localhost:3001/login 时更新我的 cookie?
我一定是漏掉了什么或者做错了什么。谢谢!
this thread 关于 cookie 本身的工作方式以及 Axios 如何处理它们。根据您的环境,有几项可能会起作用,所以我不会重复它。