3

我正在开发一个 facebook 应用程序,我只是不了解他们的授权系统是如何工作的。

我们的基本设置是这样的

画布 URL = domain.com/facebook

这是一个简单的页面,其中包含一个指向 domain.com/facebook/app 的 FBML Iframe 元素,这是一个提供 Flash 应用程序的 HTML 页面。

Flash 应用程序从我们的应用程序服务器请求其他数据——其中一些请求请求 Facebook 数据(例如朋友 ID 列表)。

因此,Flash 然后向 domain.com/resources/facebook/friends 发出请求——这是一个 PHP 页面,它创建一个 Facebook 实例(他们的 PHP 库)并对其 API 执行必要的调用并返回数据。

但是,对这个 URL 的请求(通过 flash)没有验证,因此当它本身使用两个参数(auth_tokennext )重定向回我的画布 URL 时,它会被重定向到他们的登录名。所以请求是有效的,但是重定向会中断 flash 调用。

所以,我试图弄清楚如何让这些其他 API 调用(当他们自己 mace facebook API 调用时)从一开始就被 facebook-vaildated。

4

2 回答 2

1

好的,我想通了。

事实证明,Flash 已经遵循了重定向——我需要做的就是检测(在画布 URL 上)是否有授权请求(注意存在auth_tokennext),并在我将 auth_token 作为 GET 参数包含在内重定向到下一个 URL(基本上,将 auth_token 转发到原始请求)。

因此,与我上面所说的相反,重定向并没有中断 flash 调用——它只是没有足够的数据成为有效请求。

于 2009-01-27T20:55:26.543 回答
1

通过将代码放在下面而不是“require_login()”行来解决

if (isset($_GET['auth_token'])) {
 $sess_data=$facebook->api_client->call_method('auth.getSession',array('auth_token'=>$_GET['auth_token']));
 $facebook->set_user($sess_data['uid'],$sess_data['session_key'],$sess_data['expires']);
 $user=$sess_data['uid'];
}
if (!$sess_data) {
 $user=$facebook->require_login();
}
于 2010-01-24T20:01:01.207 回答