Express Passport本地策略永远不会被调用

Express Passport本地策略永远不会被调用,express,passport.js,passport-local,Express,Passport.js,Passport Local,我知道这个问题在stack over flow中被问了很多次。我尝试了所有公认的答案,但无法将我的本地策略付诸实施。这是我的密码 var express = require('express'); var app = express(); const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; app.use(cookieParser()); // read

我知道这个问题在stack over flow中被问了很多次。我尝试了所有公认的答案,但无法将我的本地策略付诸实施。这是我的密码

var express = require('express');
var app = express();
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
app.set('trust proxy', 1); // trust first proxy
app.use(session({
  secret: '564sdf4as564f56a7s765s4afjkgadxjkbadksj',
  resave: true,
  saveUninitialized: true,
  cookie: { secure: true }
}));
app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy({
  usernameField:'userName',
  passwordField:'password',
  passReqToCallback : true 
},function(request, userName, password, done) {
  console.log(request);
  UserAccount.findOne({'userName': userName} , function(err, user) {
    if (err) return done(err);
    if (!user) return done(null, false, 'Incorrect username.' );
    user.verifyPassword(password, function(err, isMatch) {
      if (isMatch) {
        return done(null, user);
      } else {
        return done(null, false, 'Incorrect password.');
      }
    });
  });
}));

passport.serializeUser(function(user, done) {
  console.log('Serialize user called');
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  console.log('Deserialize user called');
  UserAccount.findById(id, function(err, user) {
    done(err, user);
  });
});
然后我创建了一个路由器,就像

var router = express.Router();
require('./controllers/user')(router,passport);
app.use('/api',router);
然后在我的用户控制器中,我创建了signIn函数,如

app.post('/signIn',function (request,response,next){
        var variables = request.body;
        console.log(variables);
        passport.authenticate('local', function(error, user, info) {
            console.log(user);
            if (error) { console.log(error); return next(err); }
            if (!user) { return response.redirect('/login'); }
            response.logIn(user, function(err) {
              if (err) { return next(err); }
              return response.redirect('/users/' + user.username);
            });
        })(request, response, next);
    });
然后我向“邮递员”发送了一个请求

我的mongodb用户名和密码字段相同


在my db中有一个具有此用户名和密码的帐户。但每次它在内部身份验证中将“user”返回为“false”。我试图在本地策略中安慰我的请求,但它从未被调用。我不明白我做错了什么?有人能帮忙解决这个问题吗?非常感谢。

您应该命名本地策略并在身份验证中使用它。 像这样使用passport.Use('local-strategy',newlocalstrategy({}); 像
passport.authenticate('local-strategy');

{
    "userName":"karthik@abc.com",
    "password":"qwerty"
}