收到“错误":“未知身份验证策略" [英] Getting "error": "Unknown authentication strategy \"jwt\""

查看:534
本文介绍了收到“错误":“未知身份验证策略"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Express,Mongoose,Passport和JWT实现授权功能.

I'm implementing an authorization feature using Express, Mongoose, Passport and JWT.

我可以成功注册用户.我能够进行身份验证并生成一个JWT,可以在JWT站点上对其进行解析,但是由于某种原因,我收到了未知身份验证策略错误消息.

I'm able to register a user ok. I'm able to authenticate and generate a JWT, which I can parse on the JWT site, but for some reason, I'm getting an Unknown authentication strategy error message.

我的所有代码块都放置在位于以下位置的Plunker实例上:

I have all my code blocks laid out on a Plunker instance at:

https://plnkr.co/edit/ZNjQwcZ4rMymzBXNy5nX?p=catalogue

这是我的password.js文件,其中包含我的策略:

Here is my passport.js file, which contains my strategy:

var JwtStrategy = require('passport-jwt').Strategy;

// load up the user model
var User = require('../models/user');
var config = require('../config/database'); // get db config file

module.exports = function(passport) {
  var opts = {};
  opts.secretOrKey = config.secret;
  passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    User.findOne({id: jwt_payload.id}, function(err, user) {
          if (err) {
              return done(err, false);
          }
          if (user) {
              done(null, user);
          } else {
              done(null, false);
          }
      });
  }));
};

这是我的authentication.js文件的样子:

Here is what my authentication.js file looks like:

var express = require('express');
var router = express.Router();
var jwt = require('jwt-simple');
var config = require('../config/database'); 

var User = require('../models/user');



router.route('/')
.post(function(req, res) {

  User.findOne({
    name: req.body.name
  }, function(err, user) {
    if (err)
      res.send(err);

    if (!user) {
      res.send({success: false, msg: 'Authentication failed. User not found.'});
    } else {
      // check if password matches
      user.comparePassword(req.body.password, function (err, isMatch) {
        if (isMatch && !err) {
          // if user is found and password is right create a token
          var token = jwt.encode(user, config.secret);
          // return the information including token as JSON
          res.json({success: true, token: 'JWT ' + token});
        } else {
          res.send({success: false, msg: 'Authentication failed. Wrong password.'});
        }
      });
    }
  });
});


module.exports = router;

这是我正在呼叫的端点,它产生了错误:

Here is the endpoint I'm calling that is generating the error:

var express = require('express');
var router = express.Router();
var jwt = require('jwt-simple');
var config = require('../config/database'); 
var passport  = require('passport');

var User = require('../models/user');

router.route('/')

.get(passport.authenticate('jwt', { session: false}), function(req, res) {
  var token = getToken(req.headers);
  if (token) {
    var decoded = jwt.decode(token, config.secret);
    User.findOne({
      name: decoded.name
    }, function(err, user) {
        if (err) throw err;

        if (!user) {
          return res.status(403).send({success: false, msg: 'Authentication failed. User not found.'});
        } else {
          res.json({success: true, msg: 'Welcome in the member area ' + user.name + '!'});
        }
    });
  } else {
    return res.status(403).send({success: false, msg: 'No token provided.'});
  }
});

getToken = function (headers) {
  if (headers && headers.authorization) {
    var parted = headers.authorization.split(' ');
    if (parted.length === 2) {
      return parted[1];
    } else {
      return null;
    }
  } else {
    return null;
  }
};

module.exports = router;

推荐答案

您忘记在应用程序中包含自己的passport.js模块.这导致nodejs找不到JWTStrategy的定义,这最终导致了您看到的错误.

You forgot to include your own passport.js module in the application. This leads nodejs to not find the definition of JWTStrategy which is ultimately causing the error that you see.

在端点文件中,仅包含本地passport.js文件:

In your endpoint file, just include the local passport.js file:

var express = require('express');
var router = express.Router();
var jwt = require('jwt-simple');
var config = require('../config/database'); 
var passport  = require('passport');

require('./passport')(passport) // as strategy in ./passport.js needs passport object

var User = require('../models/user');

router.route('/')
.get(passport.authenticate('jwt', { session: false}), function(req, res) {
  var token = getToken(req.headers);
...

这篇关于收到“错误":“未知身份验证策略"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆