我正在使用hybridauth通过Facebook将用户登录到我的php网站。
$hybridauth = new Hybrid_Auth( $config );
$facebook = $hybridauth->authenticate( "Facebook" );
$facebook_user_profile = $facebook->getUserProfile();
($config
包含我的应用的ID和密钥)
这一切都运行良好,但我想根据用户登录的页面返回到回调网址时重定向用户,以便我可以在登录后将其返回到此位置。
有没有办法通过身份验证发送自定义变量(例如url甚至是简单的id),这样我就可以在流程的另一端读取它们,并知道身份验证请求的启动位置。
这可能吗,还是我在错误的树上狂奔?
如果有人知道如何使用混合动力做到这一点,那么会有额外的荣誉,但任何让我走上正轨的建议都会受到欢迎。
答案 0 :(得分:7)
每当使用服务器端或客户端登录时,最终登陆将在FB登录对话框URL上进行。
请参阅FB login architecture中的服务器端登录以了解流程。
登录网址看起来像
https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_ID&
redirect_uri=YOUR_REDIRECT_URI&
state=SOME_ARBITRARY_BUT_UNIQUE_STRING
在这里你可以提到redirect_url
param的任何网址,登录流程之后Facebook会尝试重定向到指定的网址。您指定的URL必须是与应用程序设置中指定的基本域相同的URL。
此外,如果您需要保留登录后可能使用的任何额外数据,您可以使用state
参数。您为此参数提供的值将在不做任何更改的情况下返回。
我希望如果你搜索HybridAuth代码,你就可以找到你需要传递这些细节的地方。
答案 1 :(得分:3)
我可以想到两个简单的选择:
GET参数: 将自定义变量作为GET参数嵌入回调URL中。 (不要忘记对数据进行URL编码)
<强>会话强> 在启动身份验证方法之前,在用户的会话中设置自定义变量。
答案 2 :(得分:1)
确保您已在redirect_url
中通过$config
。
或者您可以在设置会话和放大后的header()
功能中使用php login()
。曲奇饼。
例如:
header("Location: http://www.example.com/some/where/else"); /* Redirect */
希望它会对你有所帮助。 感谢。
答案 3 :(得分:0)
Facebook建议开发人员使用会话变量。
state
参数保留/用于CSRF
https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/#token