Webtechnick CakePHP-Facebook-Plugin必须请求两次才能识别登录用户

时间:2012-04-17 19:17:33

标签: php facebook cakephp authentication

我正在使用来自webtechnick的CakePHP-Facebook-Plugin(https://github.com/webtechnick/CakePHP-Facebook-Plugin/),我在识别用户是否已登录Facebook时遇到一些麻烦。问题是:我登录到Facebook,然后我打开我的网站(localhost.localdomain),我没有登录。然后我刷新我的网页,我登录。 以上是我正在使用的代码。我已经测试了它,在第一次请求中,$ this-> Connect-> user()调用返回false(第一个和第二个),然后页面被渲染,我认为一些魔术是由init完成的或FacebookHelper->登录方法,因为如果我在没有重定向的情况下调用它,它会说我在线并使用我的网站;使用重定向设置,它会显示标签,并在我登录的第二个请求中显示。

我尝试初始化FacebookHelper并在beforeFilter上调用“login”,但没有成功(有和没有重定向)。

此外,显示facebook的登录或注销按钮的逻辑在beforeFilter中进一步完成,根据$ this-> Session-> check('Auth.User.id')的值定义特定布局。

27     public function beforeFilter() {
28 
29         try {
30             $user = $this->Auth->user();
31             $fb_user = $this->Connect->user();
32         } catch (FacebookApiException $e) {
33         } 
34         Configure::write('VertWeb.show_tabs', true);
35         if ($fb_user = $this->Connect->user()) {
36             if (!$this->Auth->loggedIn()) {
37                 if (!isset($fb_user['error_code'])) {
38                     $this->loadModel('User');
39                     $this->User->recursive = -1;
40                     if (($user = $this->User->findByFacebookId($fb_user['id'])) ||
41                         ($user = $this->User->findByEmail($fb_user['email'])) ) {
42                         
43                         $this->Auth->login($user);
44                         $this->Session->write('Auth.FacebookUser', $fb_user);
45                         $this->Session->write('Auth.User', $user['User']);
46                         $this->Session->write('Auth.FacebookUserPicture', FB::api('/me?fields=picture'));

亲切的问候, 丹尼尔

1 个答案:

答案 0 :(得分:2)

我遇到了这个问题,我修正了将这些行放在Initialize(并删除启动方法)

if (!$this->noAuth && !empty($this->uid)) {
     $this->__syncFacebookUser();
}