недопустимые JWTS в приложении узла при тестировании на почтальоне

#node.js #express #jwt

#node.js #экспресс #агентство jwt

Вопрос:

Я использую postman, чтобы попытаться заставить некоторые маршруты узлов работать, но не смог понять, почему мои JWT не работают. Большая часть моей работы основана на этом проекте. Вот мой код:

auth.js:

 var jwt = require('express-jwt'); var jwtN = require('jsonwebtoken'); var secret = require('../config').secret;  function getTokenFromHeader(req){  console.log(req.headers.authorization);  if (req.headers.authorization amp;amp; req.headers.authorization.split(' ')[0] === 'Token' ||  req.headers.authorization amp;amp; req.headers.authorization.split(' ')[0] === 'Bearer') {  return req.headers.authorization.split(' ')[1];  }   return null; }  var auth = {  required: jwt({  secret: secret,  userProperty: 'payload',  getToken: getTokenFromHeader,  algorithms: ['HS256']  }),  optional: jwt({  secret: secret,  userProperty: 'payload',  credentialsRequired: false,  getToken: getTokenFromHeader,  algorithms: ['HS256']  }),  reqNew: function(req, res, next){  var token = getTokenFromHeader(req);  console.log("token ", token, " secret ", secret);   if (token == null) return res.sendStatus(401)   jwtN.verify(token, secret, (err, payload) =gt; {  console.log(err)    if (err){ return res.sendStatus(403);}    req.payload = payload;    next()  })  } };  module.exports = auth;   

И вот как выглядит мой маршрут получения пользователя:

 router.get('/user', auth.required, function(req, res, next){  User.findById(req.payload.id).then(function(user){  if(!user){ return res.sendStatus(401); }   return res.json({user: user.toAuthJSON()});  }).catch(next); });  

Как для auth.required, так и для auth.reqNew ничего не работает. Я проверил, что правильно разделяю свои токены из заголовка, но я продолжаю получать эту ошибку в postman, когда использую токен, который я получаю от маршрута входа в систему.

 {  "errors": {  "message": "invalid token",  "error": {  "name": "UnauthorizedError",  "message": "invalid token",  "code": "invalid_token",  "status": 401,  "inner": {  "name": "JsonWebTokenError",  "message": "invalid token"  }  }  } }  

Вот как я генерирую JWTs:

 UserSchema.methods.generateJWT = function() {  var today = new Date();  var exp = new Date(today);  exp.setDate(today.getDate()   60);   return jwt.sign({  id: this._id,  email: this.email,  exp: parseInt(exp.getTime() / 1000),  }, secret, {algorithm: 'HS256'} ); };  

Я пробовал с = в конце и без него, но, похоже, мне это определенно нужно. Мои жетоны прекрасно декодируются на jwt.io веб-сайт с правильной информацией. Действительно не знаю, что еще попробовать, был бы очень признателен за помощь! Большое спасибо.

Комментарии:

1. Не могли бы вы, пожалуйста. показать свой жетон? И что вы имеете в виду здесь, когда я пробовал с = в конце и без = в конце ?

2. Вот жетон: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxYjE2YmYzNzk1YjAxYzE0MzNjYTVlZSIsImVtYWlsIjoiZnJhbmt0aGV0YW5rQGdtYWlsLmNvbSIsImV4cCI6MTY0NDI0MzE5NCwiaWF0IjoxNjM5MDU5MTk0fQ.-kZvd_jF56cUQhN7wp-QdcyouRFtGkAY7k_OILwDDTw

3. И под этой частью я подразумевал, что пытался отправить токен с = в конце и без него

4. Спасибо за токен, по крайней мере, срок его действия не истек, он действителен до 22 февраля. Я не вижу никакого » = » на токене, и у него его не должно быть, потому что 3 части закодированы в base64url. Вы на 100% уверены, что секрет для подписи и проверки идентичен?