`Bad Request`错误:使用passport.js + express时

时间:2017-01-03 07:49:49

标签: javascript node.js express get passport.js

我有以下代码将有效用户重定向到/profile url with passport.js包,但我收到Bad Request错误,控制台记录:GET /profile 400 24.100 ms - -

我想知道可能是什么原因。

var express = require('express')

//...

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

var morgan=require('morgan')
app.use(morgan('dev')) // log every request to the console

app.get('/profile', passport.authenticate('local'),function(req,res){
    res.render('profile.ejs',{
        user: req.user
    });
})

1 个答案:

答案 0 :(得分:0)

我的问题是由于我的代码中不包含cookie-session。我在代码中添加了以下行,问题解决了。

var cookieSession=require('cookie-session')
app.use(cookieSession({
    keys:['secret1', 'secret2']
}))

显然passport.js应与cookie-session一起使用,以便能够在浏览器Cookie中存储用户会话状态。

另外,我必须按如下方式更改代码:

function authenticationMiddleware(){
    return function(req,res,next){
        if(req.isAuthenticated()){
            return next()
        }
        res.redirect('/')
    }
}

app.get('/profile', authenticationMiddleware(), function(req, res) {
////the following line did NOT work, gave `Bad Request` error:
//app.get('/profile', passport.authenticate('local'),function(req,res){
    res.render('profile.ejs',{
        user: req.user
    });
})

Thisthat GitHub文件帮我写了authenticationMiddleware()

更新

后来我意识到我不需要使用中间件。现在我的代码没有中间件,就像这样:

app.get('/profile',(req,res)=>{
    res.render('profile.ejs',{
        user: req.user
    });
})