2016-11-18 4 views
0

passport, 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 변경
관련 문제