Express 更新 JWT 以响应
Posted
技术标签:
【中文标题】Express 更新 JWT 以响应【英文标题】:Express update JWT in response 【发布时间】:2015-12-29 04:16:43 【问题描述】:我正在使用 JWT 令牌对我的应用程序中的用户进行身份验证。我将我的令牌发送到req.headers.access_token
的后端,检查我是否在数据库中找到当前令牌,如果它仍然有效,如果是,我更新令牌(更新expires
)然后转到当前路线。这部分工作正常。
我的问题是将令牌发送回前端,以便客户端可以使用更新的令牌发送下一个请求,但到目前为止我尝试的所有操作都没有正确更新标头:
res.header.access_token = token;
res.setHeader('access_token', token);
没用。
在我读到的某处我还需要添加Access-Control-Expose-Headers
,所以我在我的快速设置中添加了以下内容:
app.use(function (req, res, next)
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization, access_token');
res.setHeader('Access-Control-Expose-Headers', 'X-Requested-With,content-type, Authorization, access_token');
next();
);
但同样的问题也存在。
问题:
如何更新响应标头中的令牌? 人们通常如何一次处理多个请求(问题是,第二个请求将带有一个无效的令牌,因为我刚刚 更新了旧的)我的 jwt 使用 jwt-simple
lib
【问题讨论】:
【参考方案1】: 如何更新响应标头中的令牌?在 ExpressJS 4.x 中使用 res.set(field [, value])
(而不是 res.setHeader(field, value);
。例如
res.set(
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',
'Access-Control-Allow-Headers': 'X-Requested-With,content-type,Authorization, access_token',
'Access-Control-Expose-Headers': 'X-Requested-With,content-type, Authorization, access_token'
);
人们通常如何一次处理多个请求(问题是,第二个请求将带有一个无效的令牌,因为我刚刚更新了旧的)
您以错误的方式处理令牌。您不必在每次请求时生成新令牌并将其发送回用户。创建令牌时,您可以为令牌指定一个过期时间(使用jsonwebtoken NodeJS 模块)。
var jwt = require('jsonwebtoken');
var profile =
first_name: 'John',
last_name: 'Doe',
email: 'john@doe.com',
;
var token = jwt.sign(profile, secret, expiresInMinutes: 60*5 );
当请求到达服务器时,您可以使用jwt.verify(token, secretOrPublicKey, [options, callback])
函数对其进行验证。或者因为你使用的是 ExpressJS,你可以使用 JWT Express 中间件。
var expressJwt = require('express-jwt');
// protect /api routes with JWT
app.use('/api', expressJwt(secret: secret));
更多选项请参考express-jwt NodeJS 模块。
参考:Cookies vs Tokens. Getting auth right with Angular.JS
【讨论】:
以上是关于Express 更新 JWT 以响应的主要内容,如果未能解决你的问题,请参考以下文章
Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的令牌错误
如何使用 express 在用户浏览器的响应标头 cookie 中查找 JSON Web 令牌 (JWT) 来制作 node.js?