我一直在遵循this指南,但我不断收到错误“未知的身份验证策略‘google’”。我不知道发生了什么事,我已经尝试搜索其他答案但收效甚微。任何帮助将不胜感激,谢谢!
错误:
Unknown authentication strategy "google"
Error: Unknown authentication strategy "google"
at attempt (D:\Programming\weebly-site\node_modules\passport\lib\middleware\authenticate.js:166:37)
at authenticate (D:\Programming\weebly-site\node_modules\passport\lib\middleware\authenticate.js:342:7)
at Layer.handle [as handle_request] (D:\Programming\weebly-site\node_modules\express\lib\router\layer.js:76:5)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\route.js:100:13)
at Route.dispatch (D:\Programming\weebly-site\node_modules\express\lib\router\route.js:81:3)
at Layer.handle [as handle_request] (D:\Programming\weebly-site\node_modules\express\lib\router\layer.js:76:5)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:234:24
at Function.proto.process_params (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:312:12)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:228:12
at Function.match_layer (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:295:3)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:189:10)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:191:16
at Function.match_layer (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:295:3)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:189:10)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:191:16
at Function.match_layer (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:295:3)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:189:10)
at Function.proto.handle (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:165:3)
at router (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:34:12)
at Layer.handle [as handle_request] (D:\Programming\weebly-site\node_modules\express\lib\router\layer.js:76:5)
at trim_prefix (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:270:13)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:237:9
at Function.proto.process_params (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:312:12)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:228:12
at Function.match_layer (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:295:3)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:189:10)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:560:15
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:186:14)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:191:16
at Function.match_layer (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:295:3)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:189:10)
at Function.proto.handle (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:165:3)
at router (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:34:12)
at Layer.handle [as handle_request] (D:\Programming\weebly-site\node_modules\express\lib\router\layer.js:76:5)
at trim_prefix (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:270:13)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:237:9
at Function.proto.process_params (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:312:12)
at D:\Programming\weebly-site\node_modules\express\lib\router\index.js:228:12
at Function.match_layer (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:295:3)
at next (D:\Programming\weebly-site\node_modules\express\lib\router\index.js:189:10)
at SendStream.error (D:\Programming\weebly-site\node_modules\express\node_modules\serve-static\index.js:98:7)
at SendStream.emit (events.js:95:17)
at SendStream.error (D:\Programming\weebly-site\node_modules\express\node_modules\send\index.js:244:17)
at SendStream.onStatError (D:\Programming\weebly-site\node_modules\express\node_modules\send\index.js:340:48)
at next (D:\Programming\weebly-site\node_modules\express\node_modules\send\index.js:619:28)
at D:\Programming\weebly-site\node_modules\express\node_modules\send\index.js:627:23
at Object.oncomplete (fs.js:107:15)
admin.js
// Generated by CoffeeScript 1.8.0
(function() {
var express, isLoggedIn, passport, router;
express = require('express');
passport = require('passport');
router = express.Router();
isLoggedIn = function(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/admin");
};
router.get('/', function(req, res) {
return res.render('admin/admin_index.jade');
});
router.get('/editor', isLoggedIn, function(req, res) {
return res.render('admin/admin_editor.jade');
});
router.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email']
}));
router.get('/auth/google/callback', passport.authenticate('google', {
successRedirect: '/editor',
failureRedirect: '/'
}));
module.exports = router;
}).call(this);
passport.js
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
var User = require('../models/users.js');
var configAuth = require('./auth.js');
module.exports = function(passport) {
passport.use(new GoogleStrategy({
clientID : configAuth.googleAuth.clientID,
clientSecret : configAuth.googleAuth.clientSecret,
callbackURL : configAuth.googleAuth.callbackURL,
},
passport.serializeUser(function(user, done){
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
function(token, refreshToken, profile, done) {
process.nextTick(function() {
User.findOne({ 'google.id' : profile.id}, function(err, user) {
if(err)
return done(err);
if(user) {
return done(null, user);
} else {
var newUser = new User();
newUser.google.id = profile.id;
newUser.google.token = token;
newUser.google.name = profile.displayName;
newUser.ggoogle.email = profile.emails[0].value;
newUser.save(function(err){
if(err)
throw err;
return done(null, newUser);
});
}
});
});
}));
};
在我看来,你根本没有打电话给
require('./passport.js')(passport)
(或任何路径),即。您没有配置护照。我的假设可能得到了以下事实的进一步支持:如果您包含 passport.js
中的代码,您会看到 SyntaxError: Unexpected token ;
因为删除参数和多余的内容,这就是您定义的:
passport.use(new GoogleStrategy({}, passport.serializeUser(function(user, done){});
passport.deserializeUser(function(id, done) { });
function(token, refreshToken, profile, done) { });
如果您要遵循该教程,您应该查看定义基本应用程序的第一部分。在您的
admin.js
中,在 require('./passport.js')(passport)
行后面添加
require('passport')
步骤1-在passport.js中包含passport包并删除module.exports并按照您在admin.js中编写的方式编写代码
步骤 2 - 在 admin.js 中包含此行
require('./passport.js');
包含所有包裹后。
你的 Passport.js 看起来像这样 -
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
var User = require('../models/users.js');
var configAuth = require('./auth.js');
var passport = require('passport');
passport.use(new GoogleStrategy({
clientID : configAuth.googleAuth.clientID,
clientSecret : configAuth.googleAuth.clientSecret,
callbackURL : configAuth.googleAuth.callbackURL,
},
passport.serializeUser(function(user, done){
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
function(token, refreshToken, profile, done) {
process.nextTick(function() {
User.findOne({ 'google.id' : profile.id}, function(err, user) {
if(err)
return done(err);
if(user) {
return done(null, user);
} else {
var newUser = new User();
newUser.google.id = profile.id;
newUser.google.token = token;
newUser.google.name = profile.displayName;
newUser.ggoogle.email = profile.emails[0].value;
newUser.save(function(err){
if(err)
throw err;
return done(null, newUser);
});
}
});
});
}));
你的 admin.js 会是这样的 -
(function() {
var express, isLoggedIn, passport, router;
express = require('express');
passport = require('passport');
**// include the your passport.js file path
require('./passport.js');**
router = express.Router();
isLoggedIn = function(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/admin");
};
router.get('/', function(req, res) {
return res.render('admin/admin_index.jade');
});
router.get('/editor', isLoggedIn, function(req, res) {
return res.render('admin/admin_editor.jade');
});
router.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email']
}));
router.get('/auth/google/callback', passport.authenticate('google', {
successRedirect: '/editor',
failureRedirect: '/'
}));
module.exports = router;
}).call(this);
包括
passport.initialize();
passport.session();
解决了“未知的身份验证策略‘Google’”错误。