我已经使用CodeIgniter几年了。我不会让事情太复杂,基本上,我在我的控制器的构造函数中执行此操作:
$conf = array ( 'appId' => 'MY APP ID', 'secret' => 'MY SECRET KEY');
$facebook = $this->load->library('facebook/facebook',$conf);
然后,为了记录用户,我在facebook提供的example.php上使用相同的方法(获取用户ID,尝试捕获API调用)。 我控制器构造函数上的所有内容。
在使用这种方法的几年中,一切都运行正常,直到现在。上周我编写了一个应用程序,在我过去的每个应用程序中编写了基本相同的代码,问题是我得到了很多oAuth访问令牌错误,确切地说,我收到的消息说是访问令牌已过期,我需要一个新的来查询facebook API。
所以,我知道我没有提供有关我的代码的更多信息,但我想讨论的是方法而不是代码本身:
你如何在你的应用程序中处理facebook登录?你认为我正在做的方式是好的还是我必须在一个方法中而不是在构造函数中?我是否必须在数据库中保存访问令牌,以便在用户返回应用程序时使用相同的访问令牌?
如果你有一个带有codeigniter的例子,那就太好了。
非常感谢您提前!
P.s:我使用channel.php file with an expire date of a year并使用p3p标头自动加载CI会话库,以便浏览器接受cookie。我真的不知道自己错过了什么。 P.s2:“我在stackoverflow中已经阅读了很多相关的问题,我已经尝试了一些我在这里读过的建议,但是我得到了相同的结果。
答案 0 :(得分:2)
SDK的3.2.1版包含一个错误,该错误在(尚未标记的)3.2.2版本中得到修复。将您的base_facebook.php文件替换为github上的最新版本:
https://raw.github.com/facebook/facebook-php-sdk/master/src/base_facebook.php
此提交:
https://github.com/facebook/facebook-php-sdk/commit/ca9472b3312dab3fdcfbffb4e45eb091f582dcb7
引用了“尝试重用已使用的auth令牌”的修复程序。
这让我疯了。很可能是在图API中关闭了一个需要更新代码的漏洞,并且从来没有错误......无论哪种方式,它都是最新修复的。
我的codeigniter代码:
$config['appId'] = '408995679168867';
$config['secret'] = 'secret';
$this->load->library('facebook', $config);
然后
$fbid = $this->facebook->getUser();
$this->fb_me = $this->facebook->api("/me");
应该有try / catch等等,但我把它留给了可读性。