JSON Web令牌 - 将令牌附加到请求

时间:2014-06-26 15:54:51

标签: json node.js token

我正在尝试通过令牌为我的网络应用设置身份验证。我使用nodejs作为后端,使用jwt-simple模块对令牌进行编码/解码。

我设法创建和处理从服务器到客户端的令牌。但是我很难处理从客户端到服务器的令牌。

例如,我有一个名为profile的页面,我可以通过以下方式处理请求:

  app.get('/profile', [bodyParser(), jwtauth], function(req, res) {

    res.render('profile.ejs', {
      user : req.user // get the user out of session and pass to template
    });
  });

jwtauth如下:

var jwt = require('jwt-simple');
var User = require('../server/models/user');
 
module.exports = function(req, res, next) {
  var token = (req.user && req.user.access_token) || (req.body && req.body.access_token) || (req.query && req.query.access_token) || req.headers['x-access-token'];

  if (!token)
    return next('invalid or no token');

  try {
    var decoded = jwt.decode(token, app.get('jwtTokenSecret'));

    if (decoded.exp <= Date.now())
      return res.end('Access token has expired', 400);

    User.findOne({ _id: decoded.id }, function(err, user) {
      req.user = user;
    });

    return next();

  } catch (err) {
    return next('couldn\'t decode token');
  }

};

在客户端,我在用户以下列方式登录后附加了令牌:

$(document).ready(function() {
  var token = __token;

  if (token) {
    $.ajaxSetup({
      headers: {
        'x-access-token': token
      }
    });
  }
});

但是,如果我尝试在浏览器中获取网址“/个人资料”,则标题中没有“x-access-token”,我会收到“无效或无效令牌”消息。

如何在客户端设置令牌,以便将其附加到我的服务器的每个请求?

非常感谢

1 个答案:

答案 0 :(得分:0)

当你在jwtauth中间件中使用console.log(req.headers)时,你看到了什么?你不止一次deifning $ .ajaxSetup吗?见post