2017-10-06 26 views
0

ユーザー名またはパスワードなしでログインしようとすると、私のpassport.use関数がまったく呼び出されないという問題があります。フィールドが空の場合、Passport.jsがLocalStrategyを呼び出さない

以下は、passport.authenticateを実行している私のエクスプレスポストルートです。

app.post('/login', passport.authenticate('local-login', { 
     failureRedirect: '/login', // redirect back to the login page if there is an error 
     failureFlash: true // allow flash messages 
    }) 

以下/loginにポスト要求があるたびにGOT HEREを印刷する必要があり、私のpassport.useです。

passport.use('local-login', new LocalStrategy({ 
     // by default, local strategy uses username and password, we will override with email 
     usernameField: 'email', 
     passwordField: 'password', 
     passReqToCallback: true // allows us to pass back the entire request to the callback 
    }, 
    function(req, email, password, done) { // callback with email and password from our form 
     // find a user whose email is the same as the forms email 
     // we are checking to see if the user trying to login already exists 
     console.log("GOT HERE"); 

emailpasswordが値、いくつかのタイプを持っている場合、これは正常に動作します。しかし、私はカスタムエラー処理を行うことができるようにemailpasswordの値がなくてもこの関数を呼びたいと思います。

どうすればこの問題を解決できますか?

答えて

2

ミドルウェアbefure認証方式を追加することができます。このような何か:

app.post('/login', function(req, res, next) { 
    // do custom error handling 
    }, passport.authenticate('local-login', { 
     failureRedirect: '/login', // redirect back to the login page if there is an error 
     failureFlash: true // allow flash messages 
}) 

そして、このミドルウェアでは、あなたが

+0

を扱ういくつかのカスタムエラーを行うことができますが、それは実際にそれを行うための最善の方法は何ですか?現在、私のエラー処理はすべてパスポート機能にあります。それを分けるのは直感的ではないようです。あなたはここにソースコードから見つけることができます –

+1

: '行うauthenticate'機能がpassowrdがあるかどうかを確認されていること https://github.com/jaredhanson/passport-local/blob/f82655aa220ad7d0fcd8b114a0303d3cf94b8d06/lib/strategy.js#L71 最初のものをおよびユーザー名フィールド。だから私はそれが最も簡単な方法だと言います。 –

+1

@CharlieFishこれは「パスポートローカル」の仕組みです。カスタム動作が必要な場合は、['passport-custom'](https://github.com/mbell8903/passport-custom)のような戦略を使用できます。 – robertklep

関連する問題