繁体   English   中英

Golang - 服务器端登录处理 - 登录后如何恢复请求?

[英]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 关于此:

  1. 将 URL 存储在 session 信息中(如果有,您确实需要非身份验证用户的会话)
  2. 将其存储在查询字符串中,例如,重定向到example.com/login?original=https%3A%2F%2Fexample.com%2Fanother-page 您的登录页面可以查找查询参数并将其包含在登录表单中,或者确保登录表单的操作与给定的 URI 匹配。 在成功登录尝试时,您可以从查询参数中获取原始 URL 并将其设置为Location
  3. 将原始 URL 存储在 cookie 中,成功登录后,您只需检查 cookie 值并使用它。

至于 HTTP POST 场景。 如果您只想将相同的 POST 请求重定向到不同的 URL ,您可以使用307 临时重定向 307 将保留请求正文和方法,而不是将其转换为 GET 请求,如303 See Other302 Found

在显示登录屏幕和成功登录后恢复原始 POST 有点复杂。 当您重定向到登录页面时,您会中断用户的流程,也许最好让用户在登录后重新发布他们的请求,而不是为他们做这件事。

话虽如此,这在技术上是可行的。 我们需要两个步骤,首先是存储所有数据以重新创建请求。 然后在登录完成后,我们可以用这个保存的数据渲染一个表单,并使用 javascript 提交表单。 通过添加:

<script>document.getElementById("myForm").submit();</script>

在您的表单之后,浏览器将在加载 javascript 后提交表单,从而重新创建原始 POST。

存储部分可以通过服务器端 session 或 cookie 完成。

暂无
暂无

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

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