PassportJs, local strategy cannot be found
javascript, node.js
Solution
Here's a boilerplate for using passport-local. The order in which the middleware is configured matters. It also implements serializeUser/deserializeUser which seem to be missing from your code.
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);
When you use `curl -v -d "username=foo&password=bar" http://127.0.0.1:3012/login` you see you'll get redirected to `/accessed`, meaning the authentication worked.
Problem
I am new to javascript and node. I followed the guide from passportJS and I am getting the error "local strategy cannot be found". I do not know why. my code, basically taken from the website at this point. ``` 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'}) ); ``` My error is that "local strategy not found", I looked inside the local-strategy module and found the function that defines it. So I assume the error lies somewhere in the way I am attempting to access that variable. My server is set up like ``` 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()); }); ```