密码确认后如何将用户重定向到URL?

时间:2019-01-22 11:38:26

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

想法:

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


问题:

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

在这一刻,我不知道该怎么办,因为如果密码正确,我会尝试将用户重定向到“ / me”路由(我从“?redirect = / me”参数获得此路由),但是中间件再次将他重定向到“ / confirm-transaction?redirect = / 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}`);
});

1 个答案:

答案 0 :(得分:1)

/me盲目地重定向到/confirm-transaction

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

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