【问题标题】:How to redirect the user to the url after the password confirmation?密码确认后如何将用户重定向到url?
【发布时间】:2026-01-26 16:50:01
【问题描述】:

想法:

我有一条受保护的路线“/me”,每次用户尝试到达那里,他都应该输入他的密码(即使用户已经登录)。如果密码正确,则用户转到“/me”路由。


问题:

我使用快递。 “/me”路由上有一个名为“confirm-transaction”的中间件。当用户转到“/me”路由时,此中间件将用户重定向到“/confirm-transaction?redirect=/me”,用户可以看到他应该输入密码的字段。

此时我不知道该怎么做,因为如果密码正确,我会尝试将用户重定向到“/me”路由(我从“?redirect=/me”参数获取此路由),但是中间件再次将他重定向到“/confirm-transaction?redirect=/me”。并且用户永远无法到达“/me”路线。


问题是:

我该如何解决这种情况?我知道如果密码正确,我应该使用“next()”,但我不能这样做,因为中间件会重定向,而且我没有更多的“next()”


这里有一些代码:

const express = require('express');
const server = express();

const requestAuthorization = (req, res, next) => {
  res.redirect(301, `/confirm-transaction?redirect=${req.originalUrl}`);
};

server.get('/me', requestAuthorization, (req, res) => {
  res.status(200).send("this is /me route");
});

server.get('/confirm-transaction', (req, res) => {
  res.status(200).sendFile("password.html");
  // there is a form with field and button with POST method to '/confirm-transaction'
});

server.post('/confirm-transaction', (req, res) => {
  if (req.query.password === 'testpassword') { // it is a fake password (for testing)
     res.redirect(301, req.query.redirect);
  }
  res.redirect(301, `/confirm-transaction?redirect=${req.query.redirect}`);
});

【问题讨论】:

  • 可以使用用户的会话;在他们输入密码后,在他们的会话中存储允许访问。在/me 路由上,仅在不允许重定向的情况下进行重定向,如果允许,则在提供页面之前重置会话变量。
  • 感谢您的回答,这是一个好方法)

标签: javascript node.js algorithm express url-redirection


【解决方案1】:

/me 无论如何都会盲目地重定向到/confirm-transaction

你可以做的是:
1.成功授权后向用户发送令牌(或某种)。客户端存储它,然后下一个请求应该在标头中包含该令牌。
2. 在requestAuthorization() 内部检查请求头是否具有有效令牌。如果是,请不要重定向,否则,请重定向。

注意:在您的情况下,您可能需要在标头中使用令牌进行重定向。
注意:您必须将令牌存储在有权将令牌与用户匹配的地方。

【讨论】: