【问题标题】:Node and Passport Cannot Get Password to change with user.setPassword节点和 Passport 无法获取使用 user.setPassword 更改的密码
【发布时间】:2020-09-25 07:31:29
【问题描述】:

所以,我正在尝试设置我的程序,以便在确认旧密码正确后更新用户的密码。我已经得到了除一行之外的所有代码,以按照我期望的方式运行:

router.put("/:id/edit_password", isLoggedIn, isAdministrator, async function(req, res){ 
    user = {};
    try {
        user = await User.findById(req.params.id)
    }
    catch (err) {console.log(err);} 

    user.authenticate(req.body.user["old_password"], async function(err, model, passwordError){
        if(passwordError){
            console.log("Old Password is Incorrect");
            // Flash Old Password is Incorrect
            res.redirect("/users/" + req.params.id + "/edit_password");
        } else if (model) {
            console.log("Old Password is Correct");
            try {
                await user.setPassword(req.body.user["new_password"]);  //this line does not work
                console.log("Password Changed");
            }
            catch (err) {console.log(err);} 
            res.redirect("/users/" + req.params.id);
        } else
        {
            console.log(err);
        }
    });
});

其中的 await user.setPassword 部分似乎不起作用。使用 console.logs,我可以确认一切都按应有的方式进行。在这种情况下,除了 user.setPassword 之外,是否需要使用其他功能? 谢谢。

【问题讨论】:

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


    【解决方案1】:

    如果您的架构或多或少是这样设置的 user{ //...somedate,password{type:string,..} }你应该像这样设置你的新密码user.Password=req.body.new_password

    if you want to use passport setPassword 
     user.setPassword(req.body.new_password, function(err,user){
            if(err){
                console.log(err)
            } else {
               console.log("the password changed for this "+user)
            }
        })
    

    【讨论】:

    • 我尝试使用 user.setPassword,因为我认为这是护照的一部分;我试图确保使用 Passport 的散列方法设置它,这就是为什么我不只是将密码本身存储在架构中。
    • 你能试试我更新的代码并告诉我它是否有效
    • 我将我的代码重构为您在此处编写的内容,不幸的是,这似乎仍然不起作用。 "console.log("the password changed for this "+user)" 按预期显示在我的控制台中,但用户的密码并没有以某种方式更改。
    • 我也 consoled.logged(req.body.user["new_password"]) 可以确认新密码字符串是我所期望的,所以这部分很好。它确实是似乎拒绝工作的 setPassword 函数。
    • 嘿,我终于用不同的功能让它工作了,但非常感谢你花时间帮助我!
    【解决方案2】:

    所以,这不会解释为什么 setPassword 不起作用,但我确实找到了一种方法来让它以不同的方式工作。我没有使用 setPassword(req.body.user["new_password"]),而是使用了护照功能:changePassword(req.body.user["old_password"], req.body.user["new_password"]) 和这行得通。我使用的文档在这里: https://www.geeksforgeeks.org/nodejs-authentication-using-passportjs-and-passport-local-mongoose/

    【讨论】:

      【解决方案3】:

      我有同样的问题。添加save() 对我有用。没有await user.save(),密码似乎不起作用。

      await user.setPassword(req.body.password, async function(err, user) {
          if (err) {
              console.log(err);
          } else {
              await user.save() ;
              console.log("Password Updated!");
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2013-07-23
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 2017-10-05
        • 2023-03-12
        • 2021-06-05
        相关资源
        最近更新 更多