使用护照本地猫鼬的错误请求

Rhy*_*rds 0 mongoose mongodb node.js passport-local passport.js

我正在尝试使用passport、mongodb、mongoose、express 和passport-local-mongoose 插件对小型webapp 进行身份验证。我bad request在尝试登录用户时被退回。我能够注册用户并将数据导入数据库。

我如何继续使用错误处理进行调试?护照和护照本地猫鼬的文档似乎很简单(我有点菜鸟)。

应用程序.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')
Run Code Online (Sandbox Code Playgroud)

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

// 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('/');
      }
  })
})
Run Code Online (Sandbox Code Playgroud)

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

router.post('/login', passport.authenticate('local'), function(req, res) {
  res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)

用户架构

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)
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

passport.use(new LocalStrategy({
    usernameField: 'email',
  },User.authenticate()));
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你