1

我正在使用 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-simplelib 用于我的 jwt

4

1 回答 1

1
  • 如何更新响应标头中的令牌?

使用res.set(field [, value])(而不是res.setHeader(field, value);ExpressJS 4.x中。例如

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 模块。


参考Cookie 与令牌。使用 Angular.JS 进行正确的身份验证

于 2015-12-29T10:29:32.310 回答