Несанкционированная ошибка 401 с использованием паспорта и почтальона - PullRequest
0 голосов
/ 19 февраля 2019

Проблема:

Когда я регистрирую пользователя, все работает хорошо.Я также могу войти через почтальона и получить «Жетон на предъявителя».Когда я перехожу к маршруту с именем «/ current» и вставляю токен носителя в почтальон, я получаю сообщение о несанкционированной ошибке, несмотря на то, что вошел в систему и использовал текущий токен носителя.

Цель:

Цель состоит в том, чтобы войти в систему, чтобы получить сведения о полезной нагрузке в моей консоли (см. Файл passport.js ниже) и получить сообщение об успешном завершении работы почтальона.

Файлы и изображения:

На первом изображении показана успешная регистрация

successful

Это следующее изображение, когда я успешно захожу и получаютокен на предъявителя

login

В первом изображении ниже я пробовал два разных способа, которые я пробовал на вкладке авторизации в Postman, а второй - заголовки ипросто вставив авторизацию и токен на предъявителя, который я получил.В любом случае, после того как я нажму кнопку «Отправить», я получаю несанкционированный доступ, несмотря на наличие текущего токена.

auth tab

header tab

Вот мои файлы, начинающиеся с users.js:

const express = require('express');
const router = express.Router();
const gravatar = require('gravatar');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const keys = require('../../config/keys');
const passport = require('passport');

//Load User Model

const User = require('../../models/User');

// @route   GET api/users/test
// @desc    Tests users route
// @access  Public
router.get('/test', (req, res) => res.json({
  msg: 'Users Works'
}));

// @route   GET api/users/register
// @desc    Register
// @access  Public
// In order to use req.body you need to make sure you have body parser

router.post('/register', (req, res) => {
  User.findOne({
    email: req.body.email
  }).then(user => {
    if (user) {
      return res.status(400).json({
        email: 'Email Already Exists'
      });
    } else {

      const avatar = gravatar.url(req.body.email, {
        s: '200', //Size
        r: 'pg', //Rating
        d: 'mm' //Default
      });
      const newUser = new User({
        name: req.body.name,
        email: req.body.email,
        avatar,
        password: req.body.password
      });
      bcrypt.genSalt(10, (err, salt) => {
        bcrypt.hash(newUser.password, salt, (err, hash) => {
          if (err) throw err;
          newUser.password = hash;
          newUser
            .save()
            .then(user => res.json(user))
            .catch(err => console.log(err));
        })
      })
    }
  })
});

// @route   GET api/users/login
// @desc    Login user / Returning JWT Token
// @access  Public

router.post('/login', (req, res) => {
  const email = req.body.email;
  const password = req.body.password;

  //Find user by email

  User.findOne({
      email
    })
    .then(user => {
      //Check for user
      if (!user) {
        return res.status(404).json({
          email: 'User not found'
        });
      }

      //check password

      bcrypt.compare(password, user.password)
        .then(isMatch => {
          if (isMatch) {
            //User Matched
            const payload = {
              id: user.id,
              name: user.name,
              avatar: user.avatar
            } //Create JWT payload
            //Sign Token
            jwt.sign(payload,
              keys.secretOrkey, {
                expiresIn: 36000
              },
              (err, token) => {
                res.json({
                  success: true,
                  token: 'Bearer ' + token
                });
              });

          } else {
            return res.status(400).json({
              password: 'Password Incorrect'
            });
          }
        });

    });
});

// @route   GET api/users/current
// @desc    Return current user
// @access  Private
router.get(
  '/current',
  passport.authenticate('jwt', {
    session: false
  }),
  (req, res) => {
    res.json({
      msg: 'Success'
    });
  }
);
module.exports = router;

Вот это passport.js

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const mongoose = require('mongoose');
const User = mongoose.model('users');
const keys = require('../config/keys');

const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'keys.secretOrKey';

module.exports = passport => {
  passport.use(
    new JwtStrategy(opts, (jwt_payload, done) => {
      console.log(jwt_payload);
    })
  );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...