javascript - 密码确认后如何将用户重定向到url?

标签 javascript node.js algorithm express redirect

想法:

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


问题:

我用 express 。在“/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 无论如何都会盲目地重定向到 /confirm-transaction

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

注意:在您的情况下,您可能必须使用 header 中的 token 进行重定向。
注意:您必须将 token 存储在有权访问 token 与用户匹配的地方。

关于javascript - 密码确认后如何将用户重定向到url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54307463/

相关文章:

algorithm - 相互递归的实际例子?

javascript - 使用 JavaScript 的 AJAX 响应更新页面内容

javascript - 如何在 Firefox 中访问 Jetpack 内置扩展的后台页面?

javascript - knockout -jqAutocomplete `options.value is not a function` 错误

javascript - 将 grunt-contrib-watch 与 grunt-express 组合使用时,浏览器 livereload 不起作用

javascript - 如何 stub Mongoose 模型构造函数

javascript - 如何创建一排三个可展开/可折叠的 div,这些 div 在悬停时会使用react?

javascript - 在 javascript 中更新 DynamoDB 中包含连字符或破折号 (-) 的属性

c# - 是否有一种算法可以确定二维空间中的一组点是否形成一个封闭区域?

arrays - 检查方阵是否满秩的最有效方法