问题描述
C:\lazystud\ravenwebAPI\node_modules\passport\lib\authenticator.js:56
if (!name) { throw new Error('Authentication strategies must have a name'); }
^
Error: Authentication strategies must have a name
at Authenticator.use (C:\lazystud\ravenwebAPI\node_modules\passport\lib\authenticator.js:56:22)
at Object.<anonymous> (C:\lazystud\ravenwebAPI\server.js:20:10)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
[nodemon] app crashed - waiting for file changes before starting...
var { getUserByUserId } = require('../models/studentModel');
var JwtStrategy = require('passport-jwt').Strategy,ExtractJwt = require('passport-jwt').ExtractJwt;
var config = require('../config/config');
var opts = {
jwtFromrequest: ExtractJwt.fromAuthHeaderAsBearerToken('Authorization'),secretorKey: config.jwtSecret
};
module.exports = function(passport){
passport.use(new JwtStrategy(opts,function (jwt_payload,done){
console.log("in one");
getUserByUserId(jwt_payload.result.student_id,function (err,user) {
if (err) {
console.log("In iff");
return done(err,false);
}
if (user) {
console.log(user);
console.log("in user");
passport.serializeUser(function (user,done) {
done(null,user);
});
passport.deserializeUser(function (user,user);
});
return done(null,user);
} else {
console.log("In user else");
return done(null,false);
}
});
}
));
};
userRoute.js
代码:
router.get('/:id',passport.authenticate( { session: true }),function(req,res) {
console.log("In get by id route");
studentController.getUserByUserId(req,res);
});
server.js
代码:
const app = express();
var passport = require('passport');
app.use(passport.initialize());
var passportMiddleware = require('./middleware/passport');
passport.use(passportMiddleware);
解决方法
* Examples: * * passport.authenticate('local',{ successRedirect: '/',failureRedirect: '/login' }); * * passport.authenticate('basic',{ session: false }); * * passport.authenticate('twitter'); *
您必须输入要通过其进行身份验证的策略的名称:
passport.authenticate( "jwt",{ session: true });
您的情况是jwt
:
,this.name = 'jwt';
// var passportMiddleware = require('./middleware/passport');
// passport.use('jwt',passportMiddleware);
require('./middleware/passport')(passport);
我在server.js中将注释行更改为下一行,现在可以将其用于多种策略。
router.get('/:id',passport.authenticate( "jwt-1",{ session: false }),function(req,res) {
console.log("In get by id route");
studentController.getUserByUserId(req,res);
});