[Node JS] # Change Password


Protector and public only Middleware


1. session

  • セッションは、要求オブジェクトに格納される.
  • loggedIn情報はセッションに格納される.
  • 2. Implementation

    export const protectorMiddleware = (req, res, next) => {
      if (req.session.loggedIn) {
        return next();
      } else {
        return res.redirect("/login");
      }
    };
    
    export const publicOnlyMiddleware = (req, res, next) => {
      if (!req.session.loggedIn) {
        return next();
      } else {
        return res.redirect("/");
      }
    };
    

    Change Password

  • パスワードを変更する第4段階
  • bodyはold password、new password、確認を受け取ります.
    現在のユーザーパスワードが入力したold passwordと一致していることを確認します.
    確認パスワードが確認と一致
    DBとセッションのユーザーパスワードを変更してログアウト
    export const postChangePassword = async (req, res) => {
      const {
        body: { oldPassword, newPassword, newPasswordConfirmation },
        session: {
          user: { _id },
        },
      } = req;
      const user = await User.findById(_id);
      const ok = await bcrypt.compare(oldPassword, user.password);
      if (!ok) {
        return res.status(400).render("users/change-password", {
          pageTitle: "change Password",
          errorMessage: "The current password is incorrect",
        });
      }
      if (newPassword !== newPasswordConfirmation) {
        return res.status(400).render("users/change-password", {
          pageTitle: "change Password",
          errorMessage: "The password does not match the confirmation",
        });
      }
      user.password = newPassword;
      await user.save();
      return res.redirect("/users/logout");
    };