如何在 php 中从谷歌登录后重定向到最后一个链接



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

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

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

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

3(使用饼干 - 我也尝试使用饼干,但它也不起作用

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

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

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

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

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 参数并相应地重定向用户。

您将检查用户是否使用某些功能登录,如果没有,您将带用户进入登录页面,用户可以使用该Google或FB登录。假设这一点,我会说,将上一个链接存储在 SESSION 中,与您检查用户是否登录的同一功能中,

我正在编写代码片段,您可以从中获得想法来编写您的特定代码。

if(isset($_SERVER['HTTP_REFERER']))
{
    $_SESSION['url_to_go'] = $_SERVER['HTTP_REFERER'];
}

当用户成功登录时,检查会话密钥url_to_go是否存在,然后将用户重定向到链接,或者将他带到仪表板或您拥有的任何默认页面。

因此,正如您所说,当我们从社交网站回来时,会话正在被清除,您可以使用带有JS(浏览器存储(的localStorage来存储$_SERVER['HTTP_REFERER'],当您回来时,您可以检索它并在使用一次后清除它。

只需创建一个会话并不断将其值更新到您当前的网址即可。谷歌登录或注销后,只需重定向到您的会话,该会话将保存您的最后一个网址。

我用代码点火器做到了。

//Remember to load 'url' helper to quickly obtain the value of current url
    $data['google_login_url']=$this->google->get_login_url();
    $this->session->set_userdata('last_page', current_url());//This lines creates a session 'last_page' and assigns it a value of the current Url.

登录后

$last_page = $this->session->userdata('last_page');//I obtains the value of last_page
redirect($last_page);

注销后

  $last_page = $this->session->userdata('last_page');
    session_destroy();
    unset($_SESSION['access_token']);
    $session_data=array(
            'sess_logged_in'=>0);
    $this->session->set_userdata($session_data);
    redirect($last_page);

相关内容

最新更新