页面刷新后如何保持用户登录

时间:2019-08-17 22:09:34

标签: node.js express authentication jwt

我有一个简单的Web应用程序,用户可以创建一个帐户并登录...每当用户登录时,我都会为其生成json-web-token并将其存储在他的数据库对象中... token用于在用户访问某些路由(标头上的Bearer令牌)时对用户进行身份验证,但是问题在于,当用户刷新页面时,我丢失了该令牌,并且他必须再次提供电子邮件和密码以生成另一个令牌...我正在考虑使用localStoragecookies,但也许有一种更好/常用的方式...任何建议都会有所帮助。

router.post('/user/login' ,async (req,res)=>{
    try {
        const user = await User.findByCredentials(req.body.email,req.body.password)
        const token = await user.generateToken()
        res.send({ user, token })
    } catch(e) {
        res.status(404).send(e)
    }
})
axios({
  method: "post",
  url: "/api/user/login",
  data: {
    email: email,
    password: password
  }
})

2 个答案:

答案 0 :(得分:0)

在页面的第一行开始会话,并将登录凭据存储在其中。登录后,您可以对要访问的所有其他页面执行相同的操作。

答案 1 :(得分:0)

使用持久性会话的传统方式(记住我功能)是使用cookie。

您可以设置登录时的最长寿命,例如30天。

router.post('/user/login', function(req, res) {
    ....
    req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000; // Cookie expires after 30 days
    ....
});

逻辑流程应为:

  1. 用户成功登录后,将发出登录cookie。
  2. 它应包含某种令牌,然后您需要对其进行哈希hash(cookie))并将其存储在数据库中。
  3. 当非登录用户访问该网站并显示登录cookie时,将在数据库中查找系列标识符。
  4. 如果它找到经过身份验证的Cookie,否则要求登录。