2016-09-27 2 views
1

Express 응용 프로그램 내에서 여권 인증을 사용하려고합니다.오류 : 알 수없는 인증 전략 "local"(Express 및 Passport)

router.get('/signup', (req ,res) => { 
    res.render('signup'); 
}); 

router.post('/signup', function(req, res, next) { 
    var username = req.body.username; 
    var password = req.body.password; 

    User.findOne({ username: username }, function(err, user) { 

    if(err) { return next(err); } 
    if(user) { 
     req.flash('error', 'User already exists'); 
     return res.redirect('/signup'); 
    } 

    var newUser = new User({ 
     username: username, 
     password: password 
    }); 
    newUser.save(next); 
    }); 
}, passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/signup', 
    failureFlash: true 
})); 

내가 테스트 사용자를 로그인 할 때마다, 그것은 작동하지만 그것은 나에게이 같은 오류 보여줍니다

Error: Unknown authentication strategy "local" 

당신이 나에게 어떤 조언을 할 수 있습니다.

+0

패스포트 로컬을 사용하고 있습니까? –

+0

지금 패스포트 모듈을 사용하고 있습니다 – George

+0

전체 프로젝트의 소스 코드는 https://github.com/kiknag/Social-App – George

답변

0

개체를 전달하는 대신 로컬 뒤에 콜백 함수를 사용해보십시오. 이 같은 것 :

router.post("/register", function(req, res){ 
     var newUser = new User({username: req.body.username}); 
     User.register(newUser, req.body.password, function(err, user){ 
      if(err){ 
       req.flash("error", err.message); //such as the username is taken or no username entered etc. 
       res.redirect("/register"); 
      } else { 
      passport.authenticate("local")(req, res, function(){ 
       res.redirect("/"); 
       }); 
      } 
     }); 
    }); 
+0

에서 확인할 수 있습니다. 불행히도 작동하지 않습니다. – George

3

여권 지역 전략을 사용하기 위해 아직 Passport를 설정하지 않은 것 같습니다. 가져 오기, 인스턴스화 및 Passport에 지시하여 사용해야합니다. 다음 예는 다음과 같습니다

var LocalStrategy = require('passport-local').Strategy; 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (!user.verifyPassword(password)) { return done(null, false); } 
     return done(null, user); 
    }); 
    } 
)); 

router.post('/signup', function(req, res, next) { 
    var username = req.body.username; 
    var password = req.body.password; 

    User.findOne({ username: username }, function(err, user) { 

    if(err) { return next(err); } 
    if(user) { 
     req.flash('error', 'User already exists'); 
     return res.redirect('/signup'); 
    } 

    var newUser = new User({ 
     username: username, 
     password: password 
    }); 
    newUser.save(next); 

    passport.authenticate('local', { failureRedirect: '/signup' }), 
    function(req, res) { 
     res.redirect('/'); 
    }); 
    }); 
}); 

그 플러그인의 설명서 here을 읽어 보시기 바랍니다. 또한 인증 전략을 사용하는 here's an example app입니다.

+0

고마워, 지금해볼 게. – George