当前位置 : 主页 > 网页制作 > Nodejs >

Node.js / Express:POST变为GET(代码302)

来源:互联网 收集:自由互联 发布时间:2021-06-16
简而言之,我有一个登录页面,我的POST请求在Express 4中变为GET. 这是我的登录页面的业务部分: form id='loginForm' action='/login' method='post' table tr tdinput type='text' name='username' //td /tr tr tdinput ty
简而言之,我有一个登录页面,我的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上为GET / login和本地登录策略中的findOne()调用设置了一个断点.当我单击“提交”按钮时,捕获事物的断点位于router.get()代码中.

在调试器中,req.method是GET.

在浏览器(Chrome)中,我被告知我正在对返回302的/登录进行POST.还有一个待处理的GET /登录,带有200个代码.这两个代码(302,200)是调试器在router.get()中停止的时间.即使清除浏览器缓存也无济于事.

有人能告诉我为什么我的POST请求没有被尊重?

简单的答案

POST /登录变为GET /登录302的原因是护照模块完成的重定向.

请参阅以下代码中的failureRedirect:

router.post('/login', passport.authenticate('local-login', {
    successRedirect: '/welcome',
    failureRedirect: '/login',
    failureFlash : true
}));

当提供的凭据无效或服务器因任何原因无法进行身份验证时,可能会发生此问题.

快乐帮助!

网友评论