如何存储和访问令牌以进行身份​​验证?

时间:2018-07-16 11:11:55

标签: node.js express

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创建令牌。

2 个答案:

答案 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')