`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
});
})
我有以下代码使用 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
});
})