node.js - 如何使用 passport 和 express 显示自定义错误消息

标签 node.js express passport.js passport-local

我在注册用户时检查电子邮件是否已经存在。如果用户已经存在,我将传递错误消息“电子邮件已存在”。但在前端它显示“未经授权”错误 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);
        })
    });
});

我使用 Passport 进行身份验证,

authRouter.post('/signup', passport.authenticate('local-register'),function(req, res) {
    createSendToken(req.user, res);
});

错误信息不是我传给前端的。它显示未经授权的错误,这是默认错误。当我在前端的控制台中打印错误消息时,它显示,

Object {data: "Unauthorized", status: 401, config: Object, statusText: "Unauthorized"}

最佳答案

你没有说你想要在前端输出什么,但我猜你想让 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);
});

关于node.js - 如何使用 passport 和 express 显示自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35452844/

相关文章:

node.js - npm安装错误: EACCES: permission denied,访问 '/var/www/html'

javascript - Node mysqljs。如何正确关闭连接

node.js - express 静态服务错误路径

javascript - Node.js 要求不按预期工作

node.js - passport.deserializeUser 为每个 HTTP 请求执行 DB( Sequelize )命令

javascript - trim 来自 stdin 的输入

node.js - 不活动后 session 自动注销

javascript - 出现错误 : cannot set headers after they are sent to the client

node.js - 使用 Mongoose 中的 promise 进行 Passport 身份验证

node.js - Passport 可以保存不在 req.user 中的用户对象吗?