php - 如何在 php 中从 google 登录后重定向到最后一个链接?

标签 php google-oauth facebook-authentication socialauth

我试图在通过 Gmail 或 Facebook 登录后将用户重定向到最后一个链接。

以下是我尝试过但没有成功的四件事。

1) 使用 $_SERVER['HTTP_REFERER'] 但它会将我重定向回 Gmail 而不是我网站上的最后一个链接。

2) 使用 $_SESSION - 我尝试在登录前将最后一个 url 存储在 session 中,但登录后我没有得到它的值,因为 session 为空。

3) 使用 cookies - 我也尝试使用 cookies 但它也不起作用

4) 我尝试在重定向网址中将最后一个网址作为 $_GET 参数发送,但这样做会停止谷歌登录,因为该网址与存储在谷歌应用程序中的网址不匹配。

还有其他方法可以实现吗?

最佳答案

我不明白为什么使用 cookie 不起作用。在将用户重定向到授权服务器之前,将当前 URL 存储在 cookie 中。当 AS 将用户重定向回 redirect_uri 时,该页面会再次重定向到存储在 cookie 中的 URL。

但我更喜欢在请求中包含“最后一页 URL”(列表中的第 4 个元素)的版本。由于 Google 显然不允许在其 OAuth 配置中使用通配符,因此您可以改用 state 参数。来自 RFC 6749 - The OAuth 2.0 Authorization Framework :

state
     RECOMMENDED.  An opaque value used by the client to maintain
     state between the request and callback.  The authorization
     server includes this value when redirecting the user-agent back
     to the client.  The parameter SHOULD be used for preventing
     cross-site request forgery as described in Section 10.12.

构建重定向 URL 时,只需像这样设置 state 参数:

https://accounts.google.com/o/oauth2/v2/auth
    ?client_id=MY_CLIENT_ID
    &redirect_uri=http://example.com/oauth-redirect_uri
    &scope=REQUESTED_SCOPES
    &state=http://example.com/last-page-the-user-loaded

根据您的 OAuth 流程,授权服务器将在成功授权后将用户重定向到看起来有点像这样的 URL:

http://example.com/oauth-redirect_uri
    ?code=CODE
    &state=http://example.com/last-page-the-user-loaded

然后您的服务器可以处理 state 参数并相应地重定向用户。

关于php - 如何在 php 中从 google 登录后重定向到最后一个链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47235093/

相关文章:

PHP、MySQL; GROUP BY 不适用于日期时间

php mysqli 查询不起作用

php - Laravel 在事务中插入父子失败

php - Google Analytics 报告 API - PHP : Add user account

owin - OWIN 安全 AuthenticationHandler 中的多个 cookie 问题

php - 如何在没有登录对话框页面的情况下验证 facebook sdk?

php - 如果与 mysql 或 php 的值相同,则对数据进行分组?

php - 刷新 OAuth2 token @ Google_CalendarServices 时出错 (php)

android - 如何在 Android 上的 Chrome 中打开然后自动关闭 OAuth 页面?

facebook - 签名请求 json 字符串不完整?