[英]Golang - Server Side Login Handling - how to resume request after login?
目前,我正在使用 Gin 框架开发一个带有服务器端渲染的 web 应用程序,但我遇到了登录拦截问题。 当 HTTP GET 请求到达端点时,中间件用于检查浏览器 cookie 并将流量重定向到登录页面。 这工作正常,成功登录后,用户总是被重定向到仪表板页面。 我的问题是我应该如何将用户重定向回最初请求的 URI 而不是仪表板页面?
此外,在 HTTP POST 上还有一个更复杂的场景。 看起来 HTTP POST 方法不适用于重定向。 另外,在用户成功登录后,我将如何使用相同的 post 请求恢复请求?
谢谢您的帮助!
对于 HTTP GET 场景,这个很简单,需要在某处记住原来的 URL。 您可以通过以下几种方式 go 关于此:
example.com/login?original=https%3A%2F%2Fexample.com%2Fanother-page
。 您的登录页面可以查找查询参数并将其包含在登录表单中,或者确保登录表单的操作与给定的 URI 匹配。 在成功登录尝试时,您可以从查询参数中获取原始 URL 并将其设置为Location
。至于 HTTP POST 场景。 如果您只想将相同的 POST 请求重定向到不同的 URL ,您可以使用307 临时重定向。 307 将保留请求正文和方法,而不是将其转换为 GET 请求,如303 See Other或302 Found 。
在显示登录屏幕和成功登录后恢复原始 POST 有点复杂。 当您重定向到登录页面时,您会中断用户的流程,也许最好让用户在登录后重新发布他们的请求,而不是为他们做这件事。
话虽如此,这在技术上是可行的。 我们需要两个步骤,首先是存储所有数据以重新创建请求。 然后在登录完成后,我们可以用这个保存的数据渲染一个表单,并使用 javascript 提交表单。 通过添加:
<script>document.getElementById("myForm").submit();</script>
在您的表单之后,浏览器将在加载 javascript 后提交表单,从而重新创建原始 POST。
存储部分可以通过服务器端 session 或 cookie 完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.