【问题标题】:Reset Password Page Not Rendering Correctly When Accessing from Reset Email Link从重置电子邮件链接访问时重置密码页面未正确呈现
【发布时间】:2022-08-06 22:58:14
【问题描述】:

好的,首先,这是我的第一篇文章。我已经在高处和低处寻找解决方案,但没有找到。我首先在 Udemy 上发布了这个,因为我参加过的课程,但没有人回答,所以我在这里重新发布。

我一直在努力弄清楚为什么新密码页面无法正确显示给我。重置链接工作正常,当我从电子邮件链接发送到新密码页面时,我什至可以在新密码页面上重置密码。

但是,无论我做什么,我都无法让它显示任何样式。它只给了我基本的html。逻辑工作正常,只是页面显示不正确。

我知道这也不是 css 文件夹的路径问题。如果我只是简单地呈现为另一个没有任何令牌逻辑的基本页面,例如用新密码页面替换我的索引页面,那么它会正常显示。我只是不知道我错过了什么,或者是否有一些我需要考虑的更新。

我希望有人看到这一点并可以帮助我。这是唯一不能正常工作的事情,而且非常令人沮丧。

为了更清楚一点,如果我执行下面的操作,并且只是替换或创建一条路线,页面就会正确显示。我认为是令牌逻辑破坏了渲染,我只是不知道如何,因为我没有收到任何错误。

请让我知道您可能需要查看哪些代码,因为我不确定哪些部分会有所帮助,这里有很多活动部分。我很乐意发布任何需要的东西。

  exports.getNewPassword = (req, res, next) => {
  res.render(\"auth/new-password\", {
    path: \"/new-password\",
    pageTitle: \"Update Password\",
  });
};

使用内置逻辑并遵循电子邮件重置链接,下面将不会呈现任何样式,只会呈现 html。

exports.getNewPassword = (req, res) => {
  const token = req.params.token;
  User.findOne({
    resetToken: token,
    resetTokenExpiration: { $gt: Date.now() },
  })
    .then((user) => {
      if (!user) {
        req.flash(
          \"error\",
          \"That reset password link has already been used.\"
        );
        return res.redirect(\"/\");
      }
      let message = req.flash(\"error\");
      message.length > 0 ? (message = message[0]) : (message = null);
      res.render(\"auth/new-password\", {
        path: \"/new-password\",
        pageTitle: \"New Password\",
        errorMessage: message,
        userId: user._id.toString(),
        passwordToken: token,
      });
    })
    .catch((err) => console.log(err));
};

我也在使用 ejs 进行模板化。正如我上面所说,如果我删除所有令牌逻辑并将页面呈现为普通视图,它就可以正常工作。

<main>
        <% if (errorMessage) { %>
            <div class=\"user-message user-message--error\"><%= errorMessage %></div>
        <% } %>
        <form class=\"login-form\" action=\"/new-password\" method=\"POST\">
            <div class=\"form-control\">
                <label for=\"password\">Password</label>
                <input type=\"password\" name=\"password\" id=\"password\">
            </div>
            <input type=\"hidden\" name=\"userId\" value=\"<%= userId %>\">
            <input type=\"hidden\" name=\"passwordToken\" value=\"<%= passwordToken %>\">
            <input type=\"hidden\" name=\"_csrf\" value=\"<%= csrfToken %>\">
            <button class=\"btn\" type=\"submit\">Update Password</button>
        </form>
    </main>

    标签: node.js


    【解决方案1】:

    好吧,万一有人偶然发现,答案很简单,尽管我不确定为什么在这种情况下是一个问题。但是,解决方案是在我的更新密码页面的 css 位置的路径前面添加一个正斜杠。

    同样,不确定为什么需要它,因为我所有的其他 css 和视图页面都在相同的文件夹结构中并且工作正常,但它显然解决了这个问题。 SMDH。

    <link rel="stylesheet" href="/css/login.css" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2021-02-05
      • 1970-01-01
      • 2019-08-21
      • 2019-11-28
      • 2016-04-04
      相关资源
      最近更新 更多