sha*_*ila 7 node.js express passport-local passport.js
我在注册用户时检查电子邮件是否已存在.如果用户已存在,则传递错误消息"email already exists".但在前端它显示"未授权"错误401.我想传递错误消息,我从后端传递到前端,但它传递默认消息.下面是我如何检查用户是否已经存在并发送错误消息,
exports.register = new LocalStrategy({
usernameField: 'email',
passReqToCallback: true
}, function(req, email, password, done,res) {
var newUser = new User({
email: email,
password: password,
name: req.body.fname
});
var searchUser = {
email: email
};
User.findOne(searchUser, function(err, user) {
if (err) return done(err);
console.log("err "+err);
if (user) {
return done(null, false, {
message: "email already exists"
});
}
newUser.save(function(err) {
console.log("newUser "+newUser);
done(null, newUser);
})
});
});
Run Code Online (Sandbox Code Playgroud)
我使用护照进行身份验证,
authRouter.post('/signup', passport.authenticate('local-register'),function(req, res) {
createSendToken(req.user, res);
});
Run Code Online (Sandbox Code Playgroud)
错误消息不是我传递给前端的消息.它显示未经授权的错误,这是默认错误.当我在前端的控制台中打印错误消息时,它显示,
Object {data: "Unauthorized", status: 401, config: Object, statusText: "Unauthorized"}
Run Code Online (Sandbox Code Playgroud)
你没有说出你想要的前端输出,但我猜你想要data成为message你所设置的输出LocalStrategy.
这是一种方法:
authRouter.post('/signup', function(req, res, next) {
passport.authenticate('local-register', function(err, user, info) {
if (err) { return next(err); }
if (!user) {
res.status(401);
res.end(info.message);
return;
}
createSendToken(req.user, res);
})(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)