Javascript Passport local返回错误400错误请求
我正在尝试将passport集成到我的代码的登录表单中。在我调用passport.authenticate之前,客户端调用服务器端的工作正常。在请求中,返回了400个错误请求。我错过了什么 HTML server.jsJavascript Passport local返回错误400错误请求,javascript,angularjs,express,passport.js,passport-local,Javascript,Angularjs,Express,Passport.js,Passport Local,我正在尝试将passport集成到我的代码的登录表单中。在我调用passport.authenticate之前,客户端调用服务器端的工作正常。在请求中,返回了400个错误请求。我错过了什么 HTML server.js passport.use(new LocalStrategy( function(username, password, done) { return done(null, false, {message:'Unable to login'}) }
passport.use(new LocalStrategy(
function(username, password, done) {
return done(null, false, {message:'Unable to login'})
}
));
passport.serializeUser(function(user,done){
done(null,user);
});
passport.deserializeUser(function(user,done){
done(null,user);
});
app.post('/api/login', passport.authenticate('local'), function(req,res){
res.json(req.user)
});
passport由于缺少用户名和密码的访问权限而引发了错误请求 它正在检查字段
username
和password
的正文和URL查询。如果其中一个为falsy,则请求将被拒绝,状态为400
在创建LocalStrategy时,您可以将附加参数中的一组选项传递给使用选项usernameField
和/或passwordField
选择不同名称字段的构造函数。在您的特定情况下,这将如下所示:
passport.use(new LocalStrategy(
{usernameField:"user-email", passwordField:"user-password"},
function(username, password, done) {
return done(null, false, {message:'Unable to login'})
}
));
在我的例子(Express 4.0)中,我没有使用此错误还来自尝试在不使用主体解析器的情况下访问请求负载 使用-
很抱歉迟了答复。是的,你是对的。谢谢options对象应该是LocalStrategy构造函数中的第一个参数,而不是passport中的第二个参数。请使用方法。@Fkids谢谢您的建议。修好了,帮个大忙!谢谢你,请尝试更清楚地解释为什么这是问题的答案。默认情况下,LocalStrategy在从请求进行身份验证时使用用户名和密码,但我们需要的是电子邮件和密码。要做到这一点,我们需要{usernameField:'email',passwordField:'password'}类似地,我有我的
应用程序。请使用(express.json());
my/login之后设置的json正文解析器
passport.use(new LocalStrategy(
function(username, password, done) {
return done(null, false, {message:'Unable to login'})
}
));
passport.serializeUser(function(user,done){
done(null,user);
});
passport.deserializeUser(function(user,done){
done(null,user);
});
app.post('/api/login', passport.authenticate('local'), function(req,res){
res.json(req.user)
});
passport.use(new LocalStrategy(
{usernameField:"user-email", passwordField:"user-password"},
function(username, password, done) {
return done(null, false, {message:'Unable to login'})
}
));
var parser = require('body-parser');
var urlencodedParser = parser.urlencoded({extended : false});
app.post("/authenticate", urlencodedParser, passport.authenticate('local'), function (request, response)
{
response.redirect('/');
});
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password'
},
function (email, password, done) {
db.collection('User').findOne({ email: email }, async function (err, user) {
console.log('user requested password caught in passport', password);
if (err) { return done(err); }
if (!user) { return done(null, false); }
const matchPassword = await comparePassword(password, user.password);
if (!matchPassword) { return done(null, false); }
return done(null, user);
});
}
));