【问题标题】:How to store JWT token in session?如何在会话中存储 JWT 令牌?
【发布时间】:2018-05-06 19:52:10
【问题描述】:

我正在学习在 NodeJS 中使用 jsonwebtoken (jwt) 和 express-session 来存储来自 jwt 的令牌,但我无法理解它。

.then((result)=>{
    var token = jwt.sign({usertype: 'parent', id: result.id}, 'secret', {expiresIn: '1h'});
    // response with token
    res.json({token: token});
});

正如您在上面看到的,我可以用令牌响应客户端,但是如何存储令牌?

我阅读了这两个文档,但仍然不明白。看起来如果我想在我的请求中使用会话,我可以在服务器端使用req.session 读取它,但如何在客户端存储尚不清楚。

【问题讨论】:

    标签: node.js session


    【解决方案1】:

    感谢@mabc224上面的评论,解决办法是把它存储在localstorage中。

    【讨论】:

    • 使用本地存储会将您的令牌暴露给 xss 攻击。
    【解决方案2】:

    对不起,我没有足够的声誉来评论您的帖子。为什么要将其存储在客户端?您可以使用 cookie 来做到这一点,但我认为这不是一个好主意。你的令牌在一小时内过期,你可以让它在会话中

    【讨论】:

    • 我知道这似乎不是一个好主意,但是在登录或创建新帐户后,我向用户发送令牌,然后用户将发送更多请求(如编辑配置文件,从某些 API 中提取信息,更改密码……甚至删除帐户)。对于这些请求,您将如何验证用户信息?
    • 我认为最好的解决方案是让 express 向您的 api 发出请求,这样您就可以在服务器端使用令牌来处理您的请求。如果您希望用户编辑他的个人资料,例如在快速路由 user/SOMEID/edit 上,您必须从客户端发布参数(姓名,姓氏,...),从服务器端(快速)获取此参数并发送使用存储在会话中的令牌将它们发送到您的 api
    • 如果你想在会话中存储一些东西,你必须做req.session.token = token,并且每次你想要retrive它: const myToken = req.session.token ||空
    • @Viet 你不需要在服务器上存储令牌。只需将其存储在客户端的本地存储中。当您需要发出像编辑配置文件这样的安全请求时,只需将此令牌发送到 api 请求标头中的服务器。并在中间件处理请求之前对其进行验证。验证后,处理请求并返回响应。如果您需要使用令牌中的解码信息,则将该解码信息保存在请求变量中,例如 req.decoded = jwtDecodedToken;示例:scotch.io/tutorials/…
    • 对不起,我错了。最好的解决方案是将其存储在本地存储中,或者存储在 cookie 中并直接从客户端使用。
    猜你喜欢
    • 2018-05-20
    • 2019-02-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2018-12-07
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多