护照本地 returns 错误 400 错误请求 Angular
Passport local returns error 400 bad request with Angular
我正在尝试将通行证整合到我的代码的登录表单中。客户端调用服务器端正常工作,直到我在请求中调用 passport.authenticate,返回 400 Bad Request。我在这里错过了什么。
HTML
<div>
<div class="row">
<div class="input-field col s12">
<input id="user-email" type="text" ng-model="user.email">
<label for="user-email">Your email address</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="user-password" type="password" ng-model="user.password">
<label for="user-password">Your password</label>
</div>
</div>
<div id="login-button-panel" class="center-align">
<button class="btn" id="login-btn" ng-click="vm.login(user);">Login</button>
</div>
<div class="section center">
<a class="modal-trigger">Forgot password?</a>
</div>
</div>
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)
});
错误请求 因缺少用户名和密码访问权限而被 passport 抛出。
它正在检查正文和 URL 查询字段 username
和 password
。如果其中一个是 falsy,则请求被拒绝,状态为 400。
在创建 LocalStrategy 时,您可以将附加参数中的一组选项传递给构造函数,使用选项 usernameField
and/or 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),我没有使用 body-parser
此错误还来自尝试在不使用 body-parser
的情况下访问请求负载
使用-
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);
});
}
));
我正在尝试将通行证整合到我的代码的登录表单中。客户端调用服务器端正常工作,直到我在请求中调用 passport.authenticate,返回 400 Bad Request。我在这里错过了什么。
HTML
<div>
<div class="row">
<div class="input-field col s12">
<input id="user-email" type="text" ng-model="user.email">
<label for="user-email">Your email address</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input id="user-password" type="password" ng-model="user.password">
<label for="user-password">Your password</label>
</div>
</div>
<div id="login-button-panel" class="center-align">
<button class="btn" id="login-btn" ng-click="vm.login(user);">Login</button>
</div>
<div class="section center">
<a class="modal-trigger">Forgot password?</a>
</div>
</div>
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)
});
错误请求 因缺少用户名和密码访问权限而被 passport 抛出。
它正在检查正文和 URL 查询字段 username
和 password
。如果其中一个是 falsy,则请求被拒绝,状态为 400。
在创建 LocalStrategy 时,您可以将附加参数中的一组选项传递给构造函数,使用选项 usernameField
and/or 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),我没有使用 body-parser
此错误还来自尝试在不使用 body-parser
的情况下访问请求负载使用-
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);
});
}
));