2016-09-27 6 views
1

エクスプレスアプリでパスポート認証を使用しようとしています。エラー:不明な認証方法 "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に指示する必要があります。ここでは例です:

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

関連する問題