我可以在facebook app身份验证后将变量传递给回调网址

时间:2013-02-20 12:17:29

标签: php facebook hybridauth

我正在使用hybridauth通过Facebook将用户登录到我的php网站。

$hybridauth = new Hybrid_Auth( $config );
$facebook = $hybridauth->authenticate( "Facebook" );

$facebook_user_profile = $facebook->getUserProfile();

$config包含我的应用的ID和密钥)

这一切都运行良好,但我想根据用户登录的页面返回到回调网址时重定向用户,以便我可以在登录后将其返回到此位置。

有没有办法通过身份验证发送自定义变量(例如url甚至是简单的id),这样我就可以在流程的另一端读取它们,并知道身份验证请求的启动位置。

这可能吗,还是我在错误的树上狂奔?

如果有人知道如何使用混合动力做到这一点,那么会有额外的荣誉,但任何让我走上正轨的建议都会受到欢迎。

4 个答案:

答案 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