2017-05-25 43 views
0

嗨,伙计们首先让我告诉你们,我也是CakePHP和MVC的新手,但我的老客户之一请我给我一些好处,我作为一个挑战。所以如果任何人都可以帮助我,我会很感激。Facebook的OAuth问题与CakePHP 2.9

我有哪里OAuth是不能正常工作遵循CakePHP的2.9应用程序是为应用程序代码/控制器/ 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); 

      } 
     } 
    } 
} 

它抛出以下错误: enter image description here

+1

你有没有试过用google搜索错误?它看起来很好描述了这个问题。 – drmonkeyninja

+0

从堆栈溢出尝试/测试了许多解决方案 –

回答

0

基于OAuth的认证码网址没有在您的fb应用程序中正确配置。 您可以转至您的fb应用程序设置并查找APP DOMAIN。

包含有您的域名:

facebook app domain input

如果你在你的本地主机开发,你可能要创建一个server.local REC在Hosts文件,以便您可以访问您的LocalServer作为server.local 。

此外,您还可以创建主FB应用程序的测试版本,并允许你有你的FB的应用程序,在其他环境中工作的副本,它被称为“创造的测试应用程序”

Facebook create test app dialog

+0

是的错过了,但现在我看到这个错误“Error too many redirects”http://prntscr.com/fcdot9 –

+0

显然它正在进入else语句。在if($ user)之前放置一个var_dump($ user); die();并看看你从Facebook获得什么。 –

+0

你可以给我更多的细节如何解决这个问题吗?我不确定你的意思 –