繁体   English   中英

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

[英]How to redirect the user to the url after the password confirmation?

想法:

我有一个受保护的路线“/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()内部检查请求头是否具有有效的令牌。 如果是,不要重定向,否则,重定向。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM