快速更新智威汤逊作为回应

我正在使用JWT令牌来validation我的应用程序中的用户。 我发送我的令牌到后端req.headers.access_token检查我是否在数据库中find当前令牌,如果它仍然有效,如果是,我更新令牌(更新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

  • 我怎样才能更新回应标题中的令牌?

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' }); 
  • 人们通常如何处理多个请求(问题是,第二个请求将带有无效的令牌,因为我只是更新了旧的请求)

你正在以错误的方式处理令牌。 您不必生成一个新的令牌,并在每个请求中发回给用户。 在创build令牌时,可以给令牌一个过期时间 (使用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])函数进行validation。 或者因为您使用ExpressJS,您可以使用JWT Express中间件。

 var expressJwt = require('express-jwt'); // protect /api routes with JWT app.use('/api', expressJwt({secret: secret})); 

请参阅express-jwt NodeJS模块以获取更多选项。


参考 : 曲奇与令牌。 使用Angular.JS获得权限