0

저는 CodeIgniter를 사용하여 웹 앱이 아닌 캔버스 앱을 만듭니다 (중요). 필자는 기존의 Facebook Connect 앱처럼 로그인 URL에 전달하여 사용자를 로그인 할 필요가 없다는 것을 의미합니다. 페이스 북이이를 처리해야한다.Facebook SDK - 세션을 가져올 수 없습니다.

그러나 서명 된 전체 요청을 받았지만 세션을 가져올 수 없습니다.

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

use Facebook\FacebookSession; 
use Facebook\FacebookRequest; 
use Facebook\GraphUser; 
use Facebook\FacebookRequestException; 
use Facebook\FacebookCanvasLoginHelper; 

class Welcome extends CI_Controller { 

    public function index() 
    { 
     FacebookSession::setDefaultApplication('303962883111629', '71b94393839fc34d2cfd43006791c5ca'); 

     $helper = new FacebookCanvasLoginHelper(); 
     try { 
      $session = $helper->getSession(); 
      echo '<pre>'; 
      print_r($helper); 
      echo '</pre>'; 
     } catch(FacebookRequestException $e) { 
      // When Facebook returns an error 
      echo "Exception occured, code: " . $e->getCode(); 
      echo " with message: " . $e->getMessage(); 
     } catch(\Exception $e) { 
      // When validation fails or other local issues 
      echo "Exception occured, code: " . $e->getCode(); 
      echo " with message: " . $e->getMessage(); 
     } 

     if ($session) { 
      // Logged in 
      $me = (new FacebookRequest(
       $session, 'GET', '/me' 
      ))->execute()->getGraphObject(GraphUser::className()); 

      echo '<pre>$me: '.print_r($me, true).'</pre>'; 
     } 
    } 
} 

이 다음 (분명한 이유 제거 일부 값)를 출력 : 다음은 내 코드입니다

Facebook\FacebookCanvasLoginHelper Object 
(
    [signedRequest:protected] => Facebook\Entities\SignedRequest Object 
     (
      [rawSignedRequest] => FmHcCuoY8lW9MXgqu5jQYrdzXQAhSC1GtCdPzeX**[partially-removed]**XNlciI6eyJjb3VudHJ5IjoiZ2IiLCJsb2NhbGUiOiJlbl9HQiIsImFnZSI6eyJtaW4iOjIxfX19 
      [payload] => Array 
       (
        [algorithm] => HMAC-SHA256 
        [issued_at] => 1405023802 
        [user] => Array 
         (
          [country] => gb 
          [locale] => en_GB 
          [age] => Array 
           (
            [min] => 21 
           ) 

         ) 

       ) 

     ) 

    [appId:protected] => **[removed]** 
    [appSecret:protected] => **[removed]** 
    [state] => 
) 

$session이 설정되어 있지만 NULL입니다.

+0

비슷한 문제의 해결 방법을 참조하십시오. https://stackoverflow.com/a/44196781/1581494 도움이 되길 바랍니다. – noadek

답변

1

캔버스 페이스 북의 앱에서는 고유 한 식별자 (및 다른 것들)를 복구하기 위해 애플리케이션을 인증하도록 사용자에게 요청해야합니다.

당신이 그 누구나없이 얻을 수있는 것은 사용자 의 언어이며, 캔버스 응용 프로그램이있는 페이지가 마음에 든다면입니다. 그게 전부 야.

그렇습니다. 응용 프로그램에 로그인해야만 고유 식별자에 액세스 할 수 있습니다. 그렇지 않으면 항상 NULL 응답을 얻습니다.

나는 캔버스 응용 프로그램에서 로그인 팝업을 발생시키기 위해 일반적으로 자바 스크립트 SDK를 사용하여 사용자가 동일한 창에 머무르게합니다.

이 정보가 도움이되기를 바랍니다.

+2

_ "이고 캔버스 앱이있는 페이지를 좋아하거나 원하지 않는 경우"_ - _ 페이지 탭 app_에 해당합니다. – CBroe

+0

"응용 프로그램에 로그인해야합니다."- 어떻게 PHP SDK를 사용하여이 작업을 수행하도록 요청할 수 있습니까? –

관련 문제