app.post('/users/login', (req, res) => {
var body = _.pick(req.body, ['email', 'password']);
Users.findByCredentials(body.email, body.password).then((user) => {
user.generateAuthTokens().then((token) => {
res.header('x-auth', token).end();
})
}).catch((e) => res.send(e));
});
在上面的代码user.generateAuthTokens()
中返回特定用户的令牌。我想将令牌存储在本地存储中,以便可以在每个页面中访问它。我已经使用res.header()
设置了令牌,但是它不起作用,我又如何在客户端读取存储的令牌?我已使用jsonwebtoken
创建令牌。
答案 0 :(得分:0)
我认为您的 app.post 是错误的。您在制作api端点吗? 并在将密码保存到数据库之前对其进行加密。从您的代码看来,您正在按原样保存它。 您也可以将令牌存储在Cookie或本地存储中。
答案 1 :(得分:0)
您可以在res.send中发送令牌
Users.findByCredentials(body.email, body.password)
.then((user) => {
user.generateAuthTokens()
.then((token) => {
res.status(200).send({ auth: true, token: token });
})
})
.catch((e) => res.send(e));
并使用前端中浏览器的本地存储保存在客户端:
// To Save
localStorage.setItem('token', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c')
// To Access
localStorage.getItem('token')
或者您也可以在HTTP客户端中设置令牌
如果您使用Axios
// Example HTTP request with axios
axios.post('/login', {
username: 'test',
password: 'test'
})
.then(function (response) {
localStorage.setItem('token', response.data.token)
})
.catch(function (error) {
console.log(error);
});
// Set to default header Authorization with token
axios.defaults.headers.common['Authorization'] = localStorage.getItem('token')