检查用户名是不是被使用 - PassportJS

Posted

技术标签:

【中文标题】检查用户名是不是被使用 - PassportJS【英文标题】: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)
        );
        
    );

);

【问题讨论】:

【参考方案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

【讨论】:

以上是关于检查用户名是不是被使用 - PassportJS的主要内容,如果未能解决你的问题,请参考以下文章

Passportjs 成功回调从未被调用

为啥 Node 中的 PassportJS 不会在注销时删除会话

我应该在哪里以及如何在passportjs中检查访问令牌的有效性

如何让 Google 停止在 PassportJS 中自动登录用户?

如何在保存在 Mongoose 之前检查数据库中是不是存在嵌入式文档

windows下批处理脚本,定时检查某一进程是不是存在,若不存在则通知用户打开此进程;若存在则退出。