Node.js - Express.js JWT始终在浏览器响应中返回无效的令牌错误

its*_*sme 12 javascript validation node.js express jwt

我正在使用带有express-jwt模块的node.js和express.js ,我已经设置了一个简单的HTTP服务器来测试所有内容:

这是涉及的节点代码:

 app.set('port', process.env.PORT || 3000);
    app.use(express.methodOverride());
    app.use(allow_cross_domain);
    app.use('/api', expressJwt({secret: '09qrjjwef923jnrge$5ndjwk'}));
    app.use(express.json());
    app.use(express.urlencoded());
    app.use('/', express.static(__dirname + '/'));
    app.use(function(err, req, res, next){
      if (err.constructor.name === 'UnauthorizedError') {
        res.send(401, 'Unauthorized');
      }
    });

    app.get('login',function(req,res){

    //...
    jwt.sign(results.username+results.email, secret, { expiresInMinutes: 9000000000*9393939393393939393939 });
    });

    app.post('api/profile',function(req,res){
     console.log(req.user); // this return undefined in console
     res.send(req.user); // response is pending and dunno why it returns error in browser console
    });
Run Code Online (Sandbox Code Playgroud)

所以,一旦我打开/loginURL,我就会登录并将会话令牌发送到api/post,这会在浏览器控制台中返回此响应错误:

{"error":{"message":"invalid signature","code":"invalid_token","status":401,"inner":{}}}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会发生这种情况,因为存储在前端的令牌和JWT中的令牌是相同的.这个错误的原因是什么?

标题POSTapi/postURL 的示例:

在此输入图像描述

wol*_*ski 12

这是一个例子

http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/

var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');

var SECRET = 'shhhhhhared-secret';

app.use('/api', expressJwt({secret: SECRET}));

app.post('/authenticate', function (req, res) {
  //TODO validate req.body.username and req.body.password
  //if is invalid, return 401
  if (!(req.body.username === 'john.doe' && req.body.password === 'foobar')) {
    res.send(401, 'Wrong user or password');
    return;
  }

  var profile = {
    first_name: 'John',
    last_name: 'Doe',
    email: 'john@doe.com',
    id: 123
  };

  // We are sending the profile inside the token
  var token = jwt.sign(profile, SECRET, { expiresIn: 18000 }); // 60*5 minutes

  res.json({ token: token });
});

app.get('/api/protected', 
  function(req, res) {  
    res.json(req.user);
  });
Run Code Online (Sandbox Code Playgroud)


Mic*_*ole 8

此外,请确保您不要在持票人之后放置:例如

坏!Authorization: Bearer: eyJ0eXAiOiI1NiJ9.eyJpZCMjEyNzk2Njl9.4eU6X1wAQieH 在日志中打印"UnauthorizedError:jwt必须提供"

Authorization: Bearer eyJ0eXAiOiI1NiJ9.eyJpZCMjEyNzk2Njl9.4eU6X1wAQieH