Passport.js throwing “undefined is not a function” with LocalStrategy

余生长醉 提交于 2019-12-06 14:14:03

Well, i'm not sure what you are doing wrong exactly since you not paste all your code, but here is a express silly working sample with passport and connect flash, good luck.

var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var flash = require('connect-flash');
// You need session to use connect flash
var session = require('express-session');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.urlencoded({extended: true}));

app.use( session({
  saveUninitialized : true,
  secret : 'Some Secret' ,
  resave : true,
}));
app.use( passport.initialize());
app.use( passport.session());
app.use(flash());


// Authentication
passport.use(
  new LocalStrategy(
    {},
    function(username, password, done) {

      // Fake user definition, just a sample.
      var user = {name: 'fake', password: 'fake'};

      // Here you can put your async authentication method from db
      if(user.name === username && user.password === password) {
        return done(null, {
          username: username
        });
      }
      else {
        return done(null, false,{});
      }
    })
);

passport.serializeUser( function(user, done) {
  return done(null, user);
});

passport.deserializeUser( function(user, done) {
  return done(null, user);
});


app.get('/', function(req, res) {

  var htmlToSend = '';

  var error = req.flash('error')[0];

  if(error)
    htmlToSend += '<div style="background-color:red; width:30%;">' + error + '</div>';

  htmlToSend += '<form action="/login" method="post"> \
    <input name="username"/> \
    <input type="password" name="password"/> \
    <button> send \
  </form>';

  res.send(htmlToSend);
});


app.post('/login', passport.authenticate('local', {
  failureRedirect: '/',
  successFlash: 'Welcome!',
  failureFlash: 'User/Password Invalid!'
}),
function(req, res) {
  res.send('Loged In as '+ req.user.username);
});


app.listen(3000, function() {
  console.log('started');
});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!