简而言之,我有一个登录页面,我的POST
请求在Express 4中变为GET
。
以下是我的登录页面的业务部分:
<form id='loginForm' action='/login' method='post'>
<table>
<tr>
<td><input type='text' name='username' /></td>
</tr>
<tr>
<td><input type='text' name='password' /></td>
</tr>
<tr>
<td><button type='submit'>Submit</button></td>
</tr>
</table>
</form>
以下是我设定的路线:
// Express 4
var router = express.Router();
router.get('/login', function(req, res) {
res.render('./login.hbs', { message: req.flash('loginMessage') });
});
router.post('/login', passport.authenticate('local-login', {
successRedirect: '/welcome',
failureRedirect: '/login',
failureFlash : true
}));
passport.use('local-login',
new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password',
passReqToCallback : true
},
function(req, email, password, next) {
User.findOne({ 'authLocal.email' : email }, function(err, user) {
console.log('Inside local-login strategy with findOne A');
[snip]
我在res.render
的{{1}}以及GET /login
策略的findOne()
来电中设置了断点。当我点击“提交”按钮时,抓取内容的断点位于local-login
代码中。
在调试器中,router.get()
为req.method
。
在浏览器(Chrome)中,我被告知我正在对{}返回302的GET
进行发布操作。还有一个等待/login
到GET
的200个代码。这两个代码(302,200)是调试器在/login
中停止的时间。即使清除浏览器缓存也无济于事。
有人可以告诉我为什么我的router.get()
请求没有得到尊重吗?
答案 0 :(得分:1)
简单回答
POST /login
变成GET /login 302
背后的原因是护照模块完成的重定向。
请参阅以下代码中的failureRedirect
:
router.post('/login', passport.authenticate('local-login', {
successRedirect: '/welcome',
failureRedirect: '/login',
failureFlash : true
}));
当提供的凭据无效或服务器因任何原因无法进行身份验证时,可能会发生这种情况。
快乐帮助!
答案 1 :(得分:0)
根据this documentation,该策略看起来只有local
而不是local-login
。
它看起来像passport.use
函数的第一个参数应该是LocalStrategy对象,而不是字符串。
试一试!