`Bad Request` error: while using passport.js + express

`Bad Request` error: while using passport.js + express

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

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

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
    });
})

我的问题是因为我的代码中没有包含 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
    });
})

This and that GitHub 文件帮我写了 authenticationMiddleware()

更新

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

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