我正在使用superagent在API上发出POST请求,这基本上是一个签署令牌并设置cookie的登录api。
反应请求的代码如下
agent
.post('http://localhost:3010/api/auth/login')
.send({username:this.state.username,password:this.state.password})
.end((err,res)=>{
if(err) console.log(err);
if(res.body.auth===true){
alert("Successful Login , You'll be Redirected");
history.push('/dashboard');
}
});
在我的快递服务器中,我正在使用此代码:
router.post('/login', function(req, res) {
User.findOne({ username: req.body.username }, function (err, user) {
if (err) return res.status(500).send('Error on the server.');
if (!user) return res.status(404).send('No user found.');
var passwordIsValid = bcrypt.compareSync(req.body.password, user.password);
if (!passwordIsValid) return res.status(401).send({ auth: false, token: null });
var token = jwt.sign({ id: user._id, role : user.role }, config.secret, {
expiresIn: 86400 // expires in 24 hours
});
res.cookie('auth',token);
res.status(200).send({ auth: true, token: token });
});
});
我在响应中设置了cookie,但问题是cookie从未在浏览器中设置。 当我使用POSTMAN来检查APIS时,问题不是这样,但是在真正的浏览器中使用apis时会出现问题。
我哪里错了?或者我应该使用什么Else方法来实现结果
答案 0 :(得分:0)
我相信您将令牌作为请求的一部分发送回客户端,可通过响应对象上的cookie属性访问。不将cookie存储在浏览器cookie jar中。为此,您需要查找cookie作为superagent响应回调的一部分,然后使用localstorage客户端保存cookie。