【问题标题】:Facebook OAuth Issue with CakePHP 2.9CakePHP 2.9 的 Facebook OAuth 问题
【发布时间】:2017-05-25 11:54:01
【问题描述】:

大家好,首先让我告诉你们,我也是 CakePHP 和 MVC 的新手,但我的一个老客户要求我帮忙,我把这当作挑战。因此,如果有人可以帮助我,我将不胜感激。

我有一个 CakePHP 2.9 应用程序,其中 OAuth 无法正常工作,下面是 app/Controller/UsersController.php 的代码

 public function facebookLogin(){

    $this->layout = false;

    App::import('Vendor', 'Facebook/facebook');
    /*$facebook = new Facebook(array(
                                  'appId'  => '1867587306812489',   // Facebook App ID 
                                  'secret' => '9fb41a07d3da3406dbab5861c3498764',  // Facebook App Secret
                                  'cookie' => false,    
                                  )
                            );   */ 
    $facebook = new Facebook(array(
                                  'appId'  => '1887387108164606',   // Facebook App ID 
                                  'secret' => '8d733aa6a4501ce27fde9626429baab9',  // Facebook App Secret
                                  'cookie' => false,    
                                  )
                            );  
    $user = $facebook->getUser();
    if ($user) {
         try {
                $user_profile = $facebook->api('/me?fields=first_name,last_name,email');

        $usersArr = $this->User->find('first',array('conditions'=>array('User.email'=>$user_profile['email'],'User.social_id'=>$user_profile['id'],'User.role_id'=>0)));


                                      $user_count = $this->User->find('first',array('conditions'=>array(),'order'=>'User.id DESC','limit'=>1));

                if(empty($usersArr)){

                        $saveUserArr['User']['username'] =  trim($user_profile['first_name']).' '.trim($user_profile['last_name']);
                        $saveUserArr['User']['firstname'] =  $user_profile['first_name'];

                        $saveUserArr['User']['lastname'] =   $user_profile['last_name'];

                                                   /* $user_n = $saveUserArr['User']['first_name'].'.'.$saveUserArr['User']['last_name'];
                        $user_cnt = $user_count['User']['id'] + 1;
                        $user_n = str_replace(' ','_',$user_n).'.'.$user_cnt;
                        $saveUserArr['User']['user_unique_id'] = $user_n;  */

                        $saveUserArr['User']['email'] =      $user_profile['email'];

                        $saveUserArr['User']['password'] =   '123456';

                        $saveUserArr['User']['social_id'] =  $user_profile['id'];

                        $saveUserArr['User']['login_from'] =  'facebook';

                        $saveUserArr['User']['role_id'] =  0;

                        $this->User->save($saveUserArr['User'],false);

                }else{

                    $this->User->id = $usersArr['User']['id'];

                    $this->User->saveField('social_id', $user_profile['id']);

                    $this->User->saveField('login_from', 'facebook');

                }

            $this->request->data['User']['email'] =  $user_profile['email'];

            $this->request->data['User']['login_from'] =  'facebook';       

          } catch (FacebookApiException $e) {

             error_log($e);

             $user = null;

          }

    } else {

     $loginUrl = $facebook->getLoginUrl(array(

            'scope'     => 'email', // Permissions to request from the user

            ));

     return $this->redirect($loginUrl);
    }                       
}

private function deleteFacebookSession(){

    Configure::write('debug', 0);   

    if(!$this->Session->check('Auth.User')){

        foreach( $this->Session->read() as $key => $value ) {

            if( strpos( $key, 'fb_' ) === 0 ) {

                $this->Session->delete($key);

            }
        }
    }
}

它会引发以下错误:

【问题讨论】:

  • 你试过用谷歌搜索错误吗?它看起来很能描述问题所在。
  • 尝试/测试了许多堆栈溢出的解决方案,但没有成功

标签: facebook cakephp oauth cakephp-2.9


【解决方案1】:

您的 fb 应用中未正确配置 oauth 脚本网址。 您可以前往您的 fb 应用设置并查找 APP DOMAIN。

在此处包含您的域:

如果您在本地主机中进行开发,您可能希望在主机文件中创建一个 server.local 记录,以便您可以将本地服务器作为 server.local 访问。

此外,您可以创建主 fb 应用程序的测试版本,并允许您拥有在其他环境中工作的 fb 应用程序的副本,这称为“创建测试应用程序”

【讨论】:

  • 是的,它被错过了,但现在我看到了这个错误“重定向错误太多”prntscr.com/fcdot9
  • 显然它正在进入 else 语句。在 if($user) 之前放置一个 var_dump($user);die();看看你从 Facebook 得到了什么。
  • 你能告诉我更多关于如何解决这个问题的细节吗?我不确定你的意思是什么
  • 如果你这样做,你会看到什么:debug($user);die;在 $user = $facebook->getUser(); 之后行。
猜你喜欢
  • 2011-10-01
  • 2011-08-07
  • 2015-06-20
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
相关资源
最近更新 更多