【问题标题】:Bad request using passport-local-mongoose使用护照本地猫鼬的错误请求
【发布时间】:2017-04-02 07:32:53
【问题描述】:

我正在尝试使用 passport、mongodb、mongoose、express 和 passport-local-mongoose 插件为小型 web 应用程序构建身份验证。尝试登录用户时,我收到了bad request。我能够注册用户并将数据放入数据库。

如何继续使用错误处理来调试它?护照和护照本地猫鼬的文档似乎很轻(而且我有点菜鸟)。

App.js

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

app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

var User = require('./models/user.js')
passport.use(new LocalStrategy(User.authenticate()));

//passport.use(new LocalStrategy(UserSchema.authenticate()))
// use static serialize and deserialize of model for passport session support
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

// Connect to Mongoose
mongoose.connect('mongodb://localhost/users')

注册路由(获取数据到数据库,但重定向失败)

// Register a user to the DB
router.post('/register', function(req, res, next){
  let firstName = req.body.firstName
  let lastName = req.body.lastName
  let username = req.body.email
  //let password = req.body.password
  let homeAirport = req.body.homeAirport

  User.register(new User ({
    firstName: firstName,
    lastName: lastName,
    username: username,
    homeAirport: homeAirport
  }),
    req.body.password, function(err, user) {
      if (err) {
        console.log(err)
        return res.render('register', {
          user: user
        })
      }
      // both of these works
      passport.authenticate('local', { failureRedirect: '/' }),
      function(req, res, next) {
        res.redirect('/');
      }
  })
})

登录路由(返回错误请求)

router.post('/login', passport.authenticate('local'), function(req, res) {
  res.redirect('/');
});

用户架构

var mongoose = require('mongoose'),
  Schema = mongoose.Schema,
  passportLocalMongoose = require('passport-local-mongoose');

// Define the scheme
var User = new Schema ({
  firstName: {
    type: String,
    index: true
  },
  lastName: {
    type: String,
    index: true
  },
  email: {
    type: String,
    index: true
  },
  homeAirport: {
    type: String,
    index: true
  }
})

User.plugin(passportLocalMongoose)

module.exports = mongoose.model('User', User)

【问题讨论】:

  • 你是怎么解决的?我遇到了同样的错误。

标签: node.js mongodb mongoose passport-local passport.js


【解决方案1】:

抱歉回复晚了!我也遇到过这样的问题。问题不在于护照本地猫鼬,而在于护照。它期望 http 请求包含用户名和密码字段。因此,如果您使用电子邮件进行注册,它会以错误的请求响应。

要解决此问题,请更改 userNameField,如下所示

passport.use(new LocalStrategy({
    usernameField: 'email',
  },User.authenticate()));

希望对你有帮助

【讨论】:

    【解决方案2】:

    我还必须将它添加到架构中,如下所示:

    userSchema.plugin(passportLocalMongoose, {
    usernameField : "email"});
    

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2018-07-31
      • 2020-09-29
      相关资源
      最近更新 更多