Passport LocalStrategy 从未调用过 Express

问题描述

我在 LocalStrategy 回调中编写了 console.log 但它从未调用过。我将 Sequelize 用于 ORM (MysqL)。

passport.js

const LocalStrategy = require('passport-local').Strategy
const passport = require('passport')
const bcrypt = require('bcrypt')
const UrunModel = require('../models/Urun')

console.log('File is Called') // If my require is wrong. But this log worked.    

passport.use(new LocalStrategy({
    usernameField: 'mail',passwordField: 'pw1'
},(username,password,done) => {
      console.log('Worked!') // Never Called
      UrunModel.findOne({
          where : {
              UrunName : 'testuser',UrunDesc : '123456'
          }
      })
    }
));

passport.serializeUser(function(user,done) {
    done(null,user.id);
  });
  
  passport.deserializeUser(function(id,done) {
    User.findById(id,function(err,user) {
      done(err,user);
    });
  });

index.js

const session = require('express-session');
const bodyParser = require('body-parser')
const urlencoded = bodyParser.urlencoded({extended:false})
const passport = require('passport')

app.use(session({
  secret: 'keyboardSecrIncKey',resave: false,saveUninitialized: true,}))

app.use(passport.initialize())
app.use(passport.session())

require('./config/passport') //require my passport.js

app.post('/test',(req,res,next) => {
  passport.authenticate('local',{
    successRedirect: '/worked',failureRedirect: '/notworked'
  })(req,next)
})

重定向了我的“/notworked”网址。我看了 3 或 4 个视频,但我的代码几乎相同。

我哪里失败了?请解释我的错。

解决方法

默认情况下,LocalStrategy 希望在名为 username 和 password 的参数中找到凭据。如果您的站点更喜欢以不同方式命名这些字段,则可以使用选项来更改默认值。

您使用 mailpw1 参数,请检查 req.body,因为 req.body 在正文中没有此参数。

如果您更换,您的问题将得到解决

{
    usernameField: 'mail',passwordField: 'pw1'
}

{
    usernameField: 'username',passwordField: 'password'
}

您也可以检查 documentation

,

已解决:

有空字段时不调用LocalStrategy(usernameField & passwordField)