2013-12-15 2 views
-1

저는 현재 yii로 마이 그 레이션을 시도하고 있습니다. (아직 새에 너무) 내 사이트에 내가이어디서 페이스 북에 아약스를 넣을 수 있습니까?

function updateButton(response) { 
       var b = document.getElementById("{$this->fbLoginButtonId}"); 
       b.onclick = function(){ 
        $("#{$this->fbLoginButtonId}").button("loading"); 
        FB.login(function(response) { 
         if(response.authResponse) { 
          $('#processing').modal({show: true, backdrop: 'static', keyboard: false}); 
          FB.api('/me', function(user) { 
           $.ajax({ type : 'post' 
            , url: '{$this->facebookLoginUrl}' 
            , data: ({ user: user }) 
            , dataType: 'json' 
            , success: function(data){ 
             if(data.error == 0){ 
              window.location.href = data.success; 
             } else { 
              $('#processing').modal('hide'); 
              showError(data.error); 
              $("#{$this->fbLoginButtonId}").button("reset"); 
             } 
            } 
           }); 
          });  
         } else { $("#{$this->fbLoginButtonId}").button("reset"); } 
        }, {scope: '{$this->facebookPermissions}'}); 
       } 
     } 

같은 라인 URL을 보이는 페이스 북 로그인 코드가 '{$ this-> facebookLoginUrl을}'은 기본적를 수행하는 파일을 가리키는 입증. YII에, 나는 보호/컨트롤러/facebookcontroller.php

class FacebookController extends Controller { 

    public $defaultAction = 'facebook'; 

    public function actionFacebook() { 
     if (app()->request->isAjaxRequest) { 
      $user = app()->request->getParam('user'); 
      Shared::debug($user); 
      // verify one last time that facebook knows this guy 
      if($user['id'] === app()->facebook->getUser()){ 
       $model = User::model()->findByEmail($user['email']); 
       if(!empty($model)){ 
        // facebook email matches one in the user database 
        $identity = new UserIdentity($model->email , null); 
        $identity->_ssoAuth = true; 
        $identity->authenticate(); 
        if($identity->errorCode === UserIdentity::ERROR_NONE){ 
         app()->user->login($identity, null); 
         echo json_encode(array('error' => false, 'success' => url('/'))); 
         app()->end(); 
        } else { 
         echo json_encode(array('error' => 'System Authentication Failed', 'code' => 'auth')); 
         app()->end(); 
        } 
       } else { 
        // nothing found, this person should register 
        // write query to input into database!!! 
       } 
      } else { 
       // fb user id past from ajax does not match who facebook says they are... 
       echo json_encode(array('error' => 'Facebook Authentication Failed', 'code' => 'fb_auth')); 
       app()->end(); 
      } 
     } else { 
      throw new CHttpException(403); 
     } 
    } 

} 

기본적으로 내가 여기 URL을 어떻게 배치해야합니까에서 해당 파일을 넣어 : '{$ this-> facebookLoginUrl}'? 나는 http://localhost/facebook.html을 시도했지만 작동하지 않습니다. 내가 불을 지르고

<h1>PHP Error [8]</h1> 
<p>Undefined index: email (/Applications/XAMPP/xamppfiles/htdocs/protected/controllers/FacebookController.php:13)</p> 
<pre>#0 /Applications/XAMPP/xamppfiles/htdocs/protected/controllers/FacebookController.php(13): CWebApplication->handleError() 
#1 /Applications/XAMPP/xamppfiles/htdocs/yii/web/actions/CInlineAction.php(49): FacebookController->actionFacebook() 
#2 /Applications/XAMPP/xamppfiles/htdocs/yii/web/CController.php(308): CInlineAction->runWithParams() 
#3 /Applications/XAMPP/xamppfiles/htdocs/yii/web/CController.php(286): FacebookController->runAction() 
#4 /Applications/XAMPP/xamppfiles/htdocs/yii/web/CController.php(265): FacebookController->runActionWithFilters() 
#5 /Applications/XAMPP/xamppfiles/htdocs/yii/web/CWebApplication.php(282): FacebookController->run() 
#6 /Applications/XAMPP/xamppfiles/htdocs/yii/web/CWebApplication.php(141): CWebApplication->runController() 
#7 /Applications/XAMPP/xamppfiles/htdocs/yii/base/CApplication.php(180): CWebApplication->processRequest() 
#8 /Applications/XAMPP/xamppfiles/htdocs/index.php(25): CWebApplication->run() 
</pre> 

이처럼 보이는 아약스 포스트 응답에이 오류가 ..

user[birthday] MM/DD/YYYY 
user[first_name] name 
user[gender] male 
user[hometown][id] 106031246101856 
user[hometown][name] CITY, STATE 
user[id] 598482999 
user[last_name] LASTNAME 
user[link] https://www.facebook.com/ID 
user[locale] en_US 
user[location][id] 106031246101856 
user[location][name] CITY, STATE 
user[middle_name] MIDDLENAME 
user[name] FULLNAME 
user[timezone] -8 
user[updated_time] 2013-12-15T16:43:03+0000 
user[username] USERNAME 
user[verified] true 

답변

0

YII는 http://www.example.com/index.php?r= {controller_id}과 같은 URL/{의 action_id}를 생성합니다.

따라서 귀하의 경우 URL은 http://www.example.com/index.php?r=facebook/facebook입니다.

yii가 어떻게 URL을 처리하는지 알아보십시오. here.

+0

'urlSuffix'=> '. html''로 설정하고 내 파일은'localhost/facebook.php'에 있습니다. 404 오류가 발생하지 않습니다. POST가 위와 같습니다. DB에 어떻게 써야합니까? – user2636556

+0

yii에 따라 기존 코드를 편집하려고합니다. 올바른 방법은 yii에서 새로운 코드로 동일한 논리를 작성하는 것입니다. 같은 접근법을 사용한다면 왜 Yii입니까? – Hemc

+0

나는 내가 여전히 yii에 처음 온다고 말했다. 하지만 테스트 목적을 위해 나는 메인 디렉토리에 넣었다. 만약 내가 그것을'controller/facebook.php'에 넣으면 여전히 문제가 남아 있습니다. db에 어떻게 써야합니까? 어떻게 내 facebook.php는'protected/controllers/facebookcontroller.php' (위의 코드)에서'actionFacebook()'을 호출할까요? – user2636556

관련 문제