【问题标题】:Check if username is taken - PassportJS检查用户名是否被使用 - PassportJS
【发布时间】:2017-07-25 17:16:08
【问题描述】:

我需要在用户创建帐户之前检查用户名是否未被使用。我正在尝试使用 AJAX 和护照构建一个单页应用程序。

当用户使用护照注册时,我将如何检查用户名是否在发布之前被使用?

不知道从哪里开始。

谢谢!

app.post("/quiz", function(req, res){

    var newUser = new User({username: req.body.username, datapoint: req.body.datapoint});
    User.register(newUser, req.body.password, function(err, user){


        // if(res.error){

          if(err){
            req.flash("error", err.message);
            res.redirect('back')
            return res.render("quiz");

        } else {

        passport.authenticate("local")(req, res, function(){
        //   req.flash("success", "Welcome to JobQuiz " + user.username);
          res.redirect("jobquiz");
          console.log(req.body.datapoint)
        });
        }
    });

});

【问题讨论】:

    标签: ajax node.js mongodb express passport.js


    【解决方案1】:

    首先使用 findOne 函数查找用户是否存在。如果用户存在,那么你可以返回一个错误

    app.post("/quiz", function(req, res){
        User.findOne({username: req.body.username}, function(err, user){
           if(err) {//error handling... }
           if(user) { //user already exists. throw error accordingly}
    
           //continue with your registration logic
           var newUser = new User({username: req.body.username, datapoint: req.body.datapoint});
             User.register(newUser, req.body.password, function(err, user){
    
    
            // if(res.error){
    
                 if(err){
                   req.flash("error", err.message);
                   res.redirect('back')
                   return res.render("quiz");
    
               } else {
    
               passport.authenticate("local")(req, res, function(){
               //   req.flash("success", "Welcome to JobQuiz " + user.username);
                 res.redirect("jobquiz");
                 console.log(req.body.datapoint)
               });
               }
           });
        });
    
    
    });
    

    以上代码在回调中处理。如果你想避免回调地狱,你可以使用 Promise

    【讨论】:

    • 太棒了,这完美!我将如何向用户“闪现”用户名被占用的消息? :)
    • @AndrewLeonardi 我被困在 ajax 你能帮我吗?
    【解决方案2】:

    如果您使用的是 passport-local-mongoose,User.register() 将检查并给出错误消息:

    具有给定用户名的用户已经注册

    您可以查看其他错误代码here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多