我刚在一个网站上添加了一个功能,允许用户使用Facebook登录。作为身份验证工作流程的一部分,Facebook会将用户转发到我的网站上的回调URL,例如以下内容。
https://127.0.0.1?facebook-login-callback?code.....#_=_
请注意结尾处的 #_=_(这不是身份验证数据的一部分,Facebook似乎没有明确原因添加这个)
在后端接收请求后,我验证凭据,为用户创建一个会话,然后使用HTTP响应中的Location头将他们转发到主站点。
我通过浏览器开发人员工具检查HTTP响应,并确认已设置位置标头为。
Location: https://127.0.0.1/
问题是,在转发后出现在浏览器地址栏中的URL为https://127.0.0.1/#_=_
我不希望用户看到这个结尾字符串。如何确保在将用户重定向到新URL时删除它?
我测试的所有浏览器都存在此问题。 Chrome,Firefox,Safari和其他一些浏览器。
我知道其他主题中有类似的问题已得到解答,但是这个工作流程中没有jquery或javascript,所有登录回调的处理都在后端代码中进行。
https://127.0.0.1?facebook-login-callback?code.....#_=_
请注意结尾处的 #_=_(这不是身份验证数据的一部分,Facebook似乎没有明确原因添加这个)
在后端接收请求后,我验证凭据,为用户创建一个会话,然后使用HTTP响应中的Location头将他们转发到主站点。
我通过浏览器开发人员工具检查HTTP响应,并确认已设置位置标头为。
Location: https://127.0.0.1/
问题是,在转发后出现在浏览器地址栏中的URL为https://127.0.0.1/#_=_
我不希望用户看到这个结尾字符串。如何确保在将用户重定向到新URL时删除它?
我测试的所有浏览器都存在此问题。 Chrome,Firefox,Safari和其他一些浏览器。
我知道其他主题中有类似的问题已得到解答,但是这个工作流程中没有jquery或javascript,所有登录回调的处理都在后端代码中进行。
HTTP/1.1 302 Found
Server: nginx/1.19.0
Date: Sun, 28 Nov 2021 10:44:30 GMT
Content-Type: text/plain; charset="UTF-8"
Content-Length: 0
Connection: keep-alive
Location: https://www.facebook.com/v12.0/dialog/oauth?client_id=XXX&redirect_uri=https%3A%2F%2Fmike.local%2Ffacebook-login-callback&state=XXXX
2 用户接受,Facebook将他们重定向到mike.local/facebook-login-callback
HTTP/3 302 Found
location: https://mike.local/facebook-login-callback?code=XXX&state=XXX#_=_
3 后端处理用户转发的Facebook标记,并为用户创建会话,然后将它们转发到 mike.local
。如下所示,我不会向 Location
HTTP 头中添加 #_=_
。请注意该行末尾的有害字符#_=_
。HTTP/1.1 302 Found
Server: nginx/1.19.0
Date: Sun, 28 Nov 2021 10:44:31 GMT
Content-Type: text/plain; charset="UTF-8"
Content-Length: 0
Connection: keep-alive
Location: https://mike.local/
Set-Cookie: s=XXX; Path=/; Expires=Fri, 01 Jan 2038 00:00:00 GMT; SameSite=None; Secure;
Set-Cookie: p=XXX; Path=/; Expires=Fri, 01 Jan 2038 00:00:00 GMT; SameSite=Strict; Secure;
4 用户访问 mike.local
网站时,发现 URL 后面有一个尾随的 #_=_
。我在 Firefox、Chrome、Safari 和 Edge 中观察到了这种情况。
我通过 Firefox 检查控制台确认没有发送任何其他 HTTP 请求。换句话说,我可以确定 3 是从我的网站发送给用户的最终 HTTP 响应。