【发布时间】:2013-03-12 21:40:48
【问题描述】:
我是 javascript 和节点的新手。我遵循了 passportJS 的指南,我收到错误“找不到本地策略”。我不知道为什么。我的代码,此时基本上取自网站。
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, mongoose = require('mongoose')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
app.use(passport.initialize());
//to configure the passport
app.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done){
console.log(username);
console.log(password);
People.findOne({username:username},
function(err, user){
if(err){return done(err); }
if(!user){
return done(null, false, {message:
'Incorrect username'});
}
if(!user.validPassword(password)){
return done(null, false, {message:
'Incorrect Password'});
}
return done(null, user);
});
}
));
//route to authenticate the user
app.post('/login',
passport.authenticate('local', { successRedirect:'/accessed',
failureRedirect: '/access'})
);
我的错误是“找不到本地策略”,我查看了本地策略模块并找到了定义它的函数。所以我认为错误存在于我试图访问该变量的方式中。
我的服务器设置如下
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(passport.initialize());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
【问题讨论】:
-
app.use(new LocalStrategy(...))应该是passport.use(new LocalStrategy(...))。 -
我改变了这一点,因为使用 passport.use 该函数从未被调用(我放入了一个 console.log)来测试这个
-
您能发布您的服务器设置吗? Passport 需要加载一堆中间件,它们的加载顺序很重要。
-
在 app.configure 下面我定义了我的 mongo 数据库
-
在你的 package.json 和 npm install -d 中添加 passport-local
标签: javascript node.js