3

webtechnick (https://github.com/webtechnick/CakePHP-Facebook-Plugin/) の CakePHP-Facebook-Plugin を使用していますが、ユーザーが Facebook に既にログインしているかどうかを認識するのに問題があります。問題は、Facebook にログインしてから、自分の Web サイト (localhost.localdomain) を開いてログインしていないことです。次に、Web サイトのページを更新すると、ログインしています。上記は、使用しているコードです。私はそれをテストしましたが、最初のリクエストでは、$this->Connect->user() 呼び出しが false (最初と 2 番目のもの) を返し、ページがレンダリングされ、init またはによって何らかの魔法が行われたと思います。 FacebookHelper->login メソッド。リダイレクトせずに呼び出すと、オンラインで自分の Web サイトを使用していると表示されるためです。リダイレクトが設定されていると、ラベルが表示され、2番目のリクエストでログインしました.

FacebookHelper を初期化し、beforeFilter で「ログイン」を呼び出そうとしましたが、成功しませんでした (リダイレクトの有無にかかわらず)。

また、facebook のログインまたはログアウト ボタンを表示するロジックは、$this->Session->check('Auth.User.id') の値に基づいて特定のレイアウトを定義する beforeFilter でさらに実行されます。

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'));

敬具、ダニエル

4

1 に答える 1

2

私はこの問題を抱えていました。この行を初期化に入れて修正します(そして起動メソッドを削除します)

if (!$this->noAuth && !empty($this->uid)) {
     $this->__syncFacebookUser();
}
于 2012-04-23T15:28:57.827 に答える