【问题标题】:PassportJs, local strategy cannot be foundPassportJs,找不到本地策略
【发布时间】: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


【解决方案1】:

这是使用本地护照的样板。配置中间件的顺序很重要。它还实现了您的代码中似乎缺少的 serializeUser/deserializeUser。

var express = require('express')
, http = require('http')
, path = require('path')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;

var app = express();

passport.use(new LocalStrategy(function(username, password, done) { 
  // insert your MongoDB check here. For now, just a simple hardcoded check.
  if (username === 'foo' && password === 'bar')
  {
    done(null, { user: username });
  }
  else
  {
    done(null, false);
  }
}));

passport.serializeUser(function(user, done) { 
  // please read the Passport documentation on how to implement this. We're now
  // just serializing the entire 'user' object. It would be more sane to serialize
  // just the unique user-id, so you can retrieve the user object from the database
  // in .deserializeUser().
  done(null, user);
});

passport.deserializeUser(function(user, done) { 
  // Again, read the documentation.
  done(null, user);
});

app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'secret' }));
app.use(passport.initialize());
app.use(passport.session());

// route to authenticate the user
app.post('/login', passport.authenticate('local', { 
  successRedirect: '/accessed',
  failureRedirect: '/access'
}));

// app.listen(3012);

当您使用curl -v -d "username=foo&password=bar" http://127.0.0.1:3012/login 时,您会看到您将被重定向到/accessed,这意味着身份验证有效。

【讨论】:

  • 即使我遇到了同样的错误。我的中间件顺序与上面的代码相同。错误“未知身份验证策略“本地””的可能原因是什么?
  • @user2235057 我认为这取决于你如何称呼new LocalStrategy()
  • 这就是我配置护照的方式。 passport.use({usernameField: 'emailAddress'}, new LocalStrategy(function(username, password, done) { //code here}) );
  • 我在这里发布了一个新问题:stackoverflow.com/questions/21454254/…。如果你能看看就太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 2016-08-12
  • 2014-02-22
相关资源
最近更新 更多