저는 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입니다.
비슷한 문제의 해결 방법을 참조하십시오. https://stackoverflow.com/a/44196781/1581494 도움이 되길 바랍니다. – noadek