javascript - 密码确认后如何将用户重定向到url?
问题描述
想法:
我有一条受保护的路线“/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
盲目地重定向到/confirm-transaction
无论如何。
您可以做的是:
1. 成功授权后向用户发送令牌(或某种)。客户端存储它,然后下一个请求应该在标头中包含该令牌。
2.内部requestAuthorization()
检查请求标头是否具有有效令牌。如果是,请不要重定向,否则,请重定向。
注意:在您的情况下,您可能必须在标头中使用令牌进行重定向。
注意:您必须将令牌存储在有权将令牌与用户匹配的地方。
推荐阅读
- c# - 是否可以使用 c# 将文件上传到 SharePoint Online 中的自定义列表
- ios - 如何绘制水平阴影?
- ios - 如何使用 Swift 中的 url 从 firebase 正确检索数据?
- python - GLFW 不再在 Python 中工作(错误 65543)
- json - 颠簸变换嵌套数组和对象
- c# - 我有异常 Unexpected sub-type: ExampleNameSpace.ClassB while Serializing in protobuf-net
- python - 不均匀长度的Concat DataFrame
- ios - CloudKit:无法发现身份
- kubernetes - k8s模块无法识别远程机器上的环境变量 - Ansible
- javascript - Vue中页面刷新后,axios获取请求给出响应