2017-06-04 93 views
0

我希望設置JWT和passport.authenticate的函數能夠運行,但只有前者正在運行。運行一個傳遞的函數和passport.authenticate

我有兩種方法可以運行嗎?

router.post('/login', (req, res, next) => { 

    const userEmail = req.body.username; 

    User.getUserByEmail(userEmail, function(err, user) { 

    const token = jwt.sign(user, config.secret, { 
     expiresIn: 604800 // 1 week 
    }); 
    new Cookies(req, res).set('access_tokenx', token, { 
     httpOnly: true, 
     secure: false 
    }); 
    return res.send(); 
    }); 
}, 
passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/users/login', 
    failureFlash: true 
}), 
function(req, res) { 
    res.redirect('/'); 
}); 

回答

1

expressdocs

如果當前中間件功能沒有結束請求 - 響應 週期,它必須調用下()到控制傳遞到下一個中​​間件 功能。

既然你想運行兩個中間件功能和一個「最後的」請求處理器,你應該next()在設定JWT功能取代return res.send();

另請注意,如果出現任何錯誤,應致電next(err)。 (您絕不應該允許請求在中間件函數中未處理,因爲客戶端永遠不會收到響應)。

+0

它工作完美,非常感謝,這已經造成了很多年的麻煩。祝你好運,你有一個美好的一天,一週,一個月,一年和生活的人! –

+0

洛爾謝謝,但你只是假設我的性別? :-) –

+0

哦,別擔心,我把每一個都稱爲男人! :-) –

相關問題