2017-09-29 15 views
0

ログインしようとすると私のコールバックが正常に呼び出され、SUCCESSというメッセージが届きました。しかし、私はまだログインページにリダイレクトされました。Passportローカル戦略が認証されていません

私のルートは次の順序で定義されている
passport.use(new LocalStrategy(
function(username, password, done) { 

     console.log(username + "----" + password) 

     if(username == "test" && password == "test"){ 
      console.log("SUCCESS") 
      done(null, { name: username}) 
     } 
     else{ 
      done(null, false) 
     } 
})) 

.. some othe initialization, cookieparser, bodyparser, session ... 
app.use(passport.initialize()) 
app.use(passport.session()) 

app.use('/login', login); 


app.post('/login',passport.authenticate('local', { failureRedirect: '/login' }), 
    function(req, res) { 
     res.redirect('/plans'); 
    }); 

app.all('*',function (req, res, next) { 

    console.log(req.isAuthenticated()) 
    if (req.isAuthenticated()) { 
     return next() 
    } 
    res.redirect('/login') 
}) 

app.use('/', index); 
app.use('/users', users); 
app.use('/plans', plans); 

は間違いがここにありますか?ありがとう。

答えて

0

これは暗闇の中での少しのショットかもしれませんが、あなたはfailureRedirectの上にsuccessRedirectが必要ですか?私はあなたが正しく訓練されていると思うが、そのルートは成功の後に何をすべきかを知らないので、どのパスウェイが利用可能であってもデフォルトになる。私が言ったように、これは推測ですが、そう考えられます。

私に知らせてください。

ただ、パスポートのドキュメントからの例を示す:あなたが認証し、その後、それはあなたが渡している実際のルート機能にフォールスルーしたい場合、またhttp://passportjs.org/docs

app.post('/login', 
passport.authenticate('local', { successRedirect: '/', 
           failureRedirect: '/login' })); 

がソースリダイレクトを一括して削除したいと思っています。

app.post('/login', 
passport.authenticate('local'), 
function(req, res) { 
    // If this function gets called, authentication was successful. 
    // `req.user` contains the authenticated user. 
res.redirect('/users/' + req.user.username); 
}); 

また、ドキュメントから。

ベスト、 Runner5

+0

は、私はすでに上記しようと試みてきたが、これは役立ちません。私はログイン試行の後でも、どんなリソースにもアクセスしようとしても、まだ認証されていません –

+0

あなたはどのようにしてユーザリクエストを認証していますか?あなたはトークンシステムまたはセッションシステムを使用していますか?私はあなたが実際に成功戦略の成功のコンソールログを取得することによって正常に表示されたうえで得ていると思う。問題は、なぜ後続のリクエストで尊重されていないかということです。私は適切な認証情報が行われている要求に対して渡されていないと仮定します。 – Runner5

関連する問題