AngularJS get passportjs策略失败消息
问题描述:
我正在构建一个基于angularJS的应用程序,并且正在我的nodeJS后端运行passportjs。 身份验证有效,但错误处理并不像我想要的那样精确。例如,当我查询我的MongoDB和失败的东西我做到以下几点:AngularJS get passportjs策略失败消息
节点:
response.send(406, {error: "Email already in use"});
角:
settingsService.saveUserOnServer($scope.settings).then(
function (user) {
//Success
},
function (response) {
console.log(response);
var error = response.data.error;
$cordovaToast.show(error, 'short', 'bottom');
});
这将敬酒“电子邮件已在使用”。我想有相同的功能使用passportjs时:
// if no user is found, return the message
if (!user)
return done(null, false, {message: 'No user found'});
这是我得到的角响应:
Object {data: "Unauthorized", status: 401, headers: function, config: Object, statusText: "Unauthorized"}
我怎样才能找回“找不到用户”的消息?提前致谢!
答
通过使用自定义的回调修正它:
app.post('/login', function (req, res, next) {
passport.authenticate('local-login', function (err, user, info) {
console.log(info);
if (err) {
return next(err);
}
if (!user) {
res.send(401, info);
}
req.logIn(user, function (err) {
if (err) {
return next(err);
}
res.send(user);
});
})(req, res, next);
});
请不要滥用HTTP状态代码。 406表示服务器无法根据客户端发送的**“Accept”头**完成请求,意思是“不可接受”,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616 -sec10.html。至于问题本身,你确定通过电线发送了什么?使用调试代理或网络嗅探器来检查实际的响应,可能是干扰... – mnemosyn 2014-11-05 15:47:23
我正在寻找一个正确的状态码,但是能够找到一个正确的1,是不是有一个可接受的一般? – Jdruwe 2014-11-05 16:24:35
确实很棘手。在“电子邮件已在使用中”的情况下,我们可以选择HTTP 409“冲突”,但如果电子邮件在URL中,我认为它确实是正确的。否则,WebDAV的非常通用的422“不可处理的实体”是我认为的一个很好的默认值(服务器理解的请求但因语义原因而被拒绝)。 – mnemosyn 2014-11-05 16:37:41