Error: Unknown authentication strategy "[object Object]"
Error: Unknown authentication strategy "[object Object]"
POST localhost/api/login
与(正确的)数据 username=test password=test 给出以下内容:
Error: Unknown authentication strategy "[object Object]"
at attempt (/var/www/node_modules/passport/lib/middleware/authenticate.js:166:37)
at authenticate (/var/www/node_modules/passport/lib/middleware/authenticate.js:342:7)
at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
at next (/var/www/node_modules/express/lib/router/route.js:110:13)
at Route.dispatch (/var/www/node_modules/express/lib/router/route.js:91:3)
at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
at /var/www/node_modules/express/lib/router/index.js:267:22
at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12)
at next (/var/www/node_modules/express/lib/router/index.js:261:10)
at SessionStrategy.strategy.pass (/var/www/node_modules/passport/lib/middleware/authenticate.js:318:9)
路线:
app.post('/api/login', passport.authenticate(new LocalStrategy(function(username, password, done) {
db.User.findOne({username: username}, function(err, user) {
if (err) return done(err);
if (!user) return done(null, false, { message: 'Username or password incorrect' });
bcrypt.compare(password, user.passHash, function(err, res) {
if (err) return done(err);
if (!res) return done(null, false, { message: 'Username or password incorrect' });
return done(null, user);
})
})
})))
我有 bodyParser 运行,我知道它在我的注册路径上工作。这里发生了什么?我一直在使用 http://passportjs.org/guide 指南,它已经掌握了基础知识,但为什么会这样?
authenticate()
不接受对象,它接受一个包含您之前配置的策略名称的字符串。您的 new LocalStrategy()
会传递给 passport.use()
。
因此您在中间件定义中这样做:
passport.use(new LocalStrategy(function(username, password, done) {
db.User.findOne({username: username}, function(err, user) {
if (err)
return done(err);
if (!user)
return done(null, false, { message: 'Username or password incorrect' });
bcrypt.compare(password, user.passHash, function(err, res) {
if (err)
return done(err);
if (!res)
return done(null, false, { message: 'Username or password incorrect' });
return done(null, user);
})
})
}));
然后你为你的路线做这样的事情:
app.post('/api/login',
passport.authenticate('local'),
function(req, res) {
// authentication successful
});
POST localhost/api/login
与(正确的)数据 username=test password=test 给出以下内容:
Error: Unknown authentication strategy "[object Object]"
at attempt (/var/www/node_modules/passport/lib/middleware/authenticate.js:166:37)
at authenticate (/var/www/node_modules/passport/lib/middleware/authenticate.js:342:7)
at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
at next (/var/www/node_modules/express/lib/router/route.js:110:13)
at Route.dispatch (/var/www/node_modules/express/lib/router/route.js:91:3)
at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
at /var/www/node_modules/express/lib/router/index.js:267:22
at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12)
at next (/var/www/node_modules/express/lib/router/index.js:261:10)
at SessionStrategy.strategy.pass (/var/www/node_modules/passport/lib/middleware/authenticate.js:318:9)
路线:
app.post('/api/login', passport.authenticate(new LocalStrategy(function(username, password, done) {
db.User.findOne({username: username}, function(err, user) {
if (err) return done(err);
if (!user) return done(null, false, { message: 'Username or password incorrect' });
bcrypt.compare(password, user.passHash, function(err, res) {
if (err) return done(err);
if (!res) return done(null, false, { message: 'Username or password incorrect' });
return done(null, user);
})
})
})))
我有 bodyParser 运行,我知道它在我的注册路径上工作。这里发生了什么?我一直在使用 http://passportjs.org/guide 指南,它已经掌握了基础知识,但为什么会这样?
authenticate()
不接受对象,它接受一个包含您之前配置的策略名称的字符串。您的 new LocalStrategy()
会传递给 passport.use()
。
因此您在中间件定义中这样做:
passport.use(new LocalStrategy(function(username, password, done) {
db.User.findOne({username: username}, function(err, user) {
if (err)
return done(err);
if (!user)
return done(null, false, { message: 'Username or password incorrect' });
bcrypt.compare(password, user.passHash, function(err, res) {
if (err)
return done(err);
if (!res)
return done(null, false, { message: 'Username or password incorrect' });
return done(null, user);
})
})
}));
然后你为你的路线做这样的事情:
app.post('/api/login',
passport.authenticate('local'),
function(req, res) {
// authentication successful
});