3

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

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

$facebook_user_profile = $facebook->getUserProfile();

$config包含我的应用程序的 id 和密钥)

这一切都很好,但是我想在返回到回调 url 时根据他们登录的页面重定向用户,以便我可以在登录后将他们返回到这个位置。

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

这是可能的,还是我叫错了树?

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

4

4 回答 4

7

每当使用服务器端或客户端登录时,最终登陆将发生在 FB 登录对话框 URL 上。

请参阅FB 登录架构中的服务器端登录以了解流程。

登录网址看起来像

https://www.facebook.com/dialog/oauth?
client_id=YOUR_APP_ID&
redirect_uri=YOUR_REDIRECT_URI&
state=SOME_ARBITRARY_BUT_UNIQUE_STRING

在这里,您可以为参数提及任何 url,redirect_url在登录流程之后,Facebook 将尝试重定向到指定的 URL。您指定的 URL 必须是与您的应用程序设置中指定的具有相同基本域的 URL。

此外,如果您需要保留登录后可以使用的任何额外数据,您可以使用state参数。您为此参数提供的值将不作任何更改地返回。

我希望如果您搜索 HybridAuth 代码,您可以找到需要传递这些详细信息的地方。

于 2013-02-27T07:59:53.123 回答
3

我可以想到两个简单的选择:

GET 参数: 将自定义变量作为 GET 参数嵌入到回调 URL 中。(不要忘记对数据进行 URL 编码)

会话: 在启动认证方法之前,在用户的会话中设置自定义变量。

于 2013-02-25T15:04:06.750 回答
1

确保您已redirect_url通过$config.

或者您可以在设置会话和 cookie 后header()在您的函数中使用 php 。login()例如:

header("Location: http://www.example.com/some/where/else"); /* Redirect */

希望它会帮助你。谢谢。

于 2013-03-02T18:31:28.657 回答
0

Facebook 建议开发者使用会话变量。该state参数为 CSRF 保留/专用

https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/#token

于 2017-01-07T07:18:12.683 回答