我尝试通过gmail,fb
登录后将用户重定向到最后一个链接以下是我尝试但未取得成功的四件事
1)用户$_SERVER['HTTP_REFERER']
但它将我重定向回gmail而不是我网站上的最后一个链接。
2)使用$_SESSION
- 我尝试在登录前在会话中存储最后一个网址但在登录后我没有得到它的值,因为会话是空的。
3)使用cookies - 我也尝试使用cokkies但它也无法正常工作
4)我尝试在重定向网址中将最后一个网址作为$_GET
参数发送,但这样做会停止谷歌登录,因为该网址与存储在谷歌应用中的网址不匹配。
还有其他方法可以实现吗?
答案 0 :(得分:1)
您将检查用户是否已登录某项功能,如果没有,您将带用户登录页面,用户可以使用Google或FB登录该页面。 假设这个, 我会说,将上一个链接存储在SESSION中与您检查用户是否登录的功能相同,
我正在编写代码片段,您可以从中获得编写特定代码的想法。
if(isset($_SERVER['HTTP_REFERER']))
{
$_SESSION['url_to_go'] = $_SERVER['HTTP_REFERER'];
}
当用户成功登录时,检查是否存在会话密钥url_to_go
,然后将用户重定向到该链接,或者将他带到仪表板或您拥有的任何默认页面。
所以,正如你所说,当我们从社交网站回来时会话被清除,你可以使用localStorage
和JS(浏览器存储)来存储$_SERVER['HTTP_REFERER']
,当你回来时,你可以在使用它之后检索并清除它。
答案 1 :(得分:1)
我看不出为什么使用cookies不起作用。在将用户重定向到授权服务器之前,请将当前URL存储在cookie中。当AS将用户重定向回redirect_uri
时,该页面会再次重定向到存储在cookie中的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.
构建重定向网址时,只需设置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流程,授权服务器会将用户重定向到成功授权后看起来有点像这样的网址:
http://example.com/oauth-redirect_uri
?code=CODE
&state=http://example.com/last-page-the-user-loaded
然后,您的服务器可以处理state
参数并相应地重定向用户。
答案 2 :(得分:0)
只需创建一个会话,并将其值不断更新为您当前的网址即可。 google登录或注销后,只需重定向到您的会话,该会话将保留您的最后一个URL。
我用codeigniter做到了。
//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);