2016-11-18 17 views
0

私はパスポート、mongodb、mongoose、express、passport-local-mongooseプラグインを使用して小さなwebappの認証を構築しようとしています。ユーザーにログインしようとしたときに私はbad requestに返されています。私はユーザーを登録し、DBにデータを取得することができます。passport-local-mongooseを使ったリクエストが間違っています

これをエラー処理でデバッグするにはどうすればよいですか?パスポートとパスポート - ローカル - マングースのためのドキュメントは軽いようです(そして、私はちょっとしたノブです)。

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') 

登録ルート(DBにデータを取得しますが、リダイレクトに失敗した)

// 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) 

答えて

2

ご返信ありがとうございます!私もこのような問題に直面した。問題はパスポート - ローカル - マングースではなく、パスポートであった。 httpリクエストにusernameとpasswordフィールドが含まれることが期待されます。あなたが登録するために電子メールを使用している場合、それは悪い要求で応答します。この問題を解決するには

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

以下のようにそれは

を役に立てば幸いusernameFieldのを変更
関連する問題