我正在尝试将护照整合到我的代码的登录表单中.客户端呼叫服务器端工作正常,直到我在请求中调用passport.authenticate,返回400 Bad Request.我在这里想念的是什么
HTML
JS
$http.post('/api/login',user).success(function(result){ console.log(result) })
server.js
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) });
Thomas Urban.. 46
护照丢失了错误的请求,因为用户名和密码无法访问.
它正在检查字段username
和URL的正文和URL查询password
.如果其中一个是假的,请求将被拒绝,状态为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'}) } ));
options对象应该是LocalStrategy构造函数中的第一个参数,而不是`passport.use`方法中的第二个参数. (2认同)
Jeff Hoye.. 11
在我的情况下(Express 4.0),我没有使用正文解析器
护照丢失了错误的请求,因为用户名和密码无法访问.
它正在检查字段username
和URL的正文和URL查询password
.如果其中一个是假的,请求将被拒绝,状态为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),我没有使用正文解析器
此错误还来自尝试访问HTML DOM元素而不使用正文解析器
body-parser是一个模块,让你遍历html文档树来读取响应,特别是在输入字段的情况下
使用 -
var parser = require('body-parser'); var urlencodedParser = parser.urlencoded({extended : false}); app.post("/authenticate", urlencodedParser, passport.authenticate('local'), function (request, response) { response.redirect('/'); });