2012-02-17 4 views
1

Facebook PHP SDK를 사용하여 사용자를 인증했습니다. PHP SDK를 사용하여 LoginUrl을 생성 한 후 사용자는 해당 LoginUrl을 클릭하면 허가를 요청하는 Facebook 페이지로 리디렉션됩니다. Go to App 링크를 클릭하면 사용자가 내 웹 사이트 http://www.mydomain.com/login/facebook_connect으로 리디렉션됩니다.Facebook PHP SDK - 사용자가 인증되지 않았습니다.

문제점 :http://www.mydomain.com/login/facebook_connect의 PHP 스크립트가 Facebook을 통해 로그인했는지 확인할 수 없습니다. 이 시점에서 $user = $facebook->getUser();은 0입니다.

내가 잘못 했습니까? 감사! LoginUrl

를 생성 페이지에 대한

PHP 코드

require 'libs/fb-php-sdk/facebook.php'; // Create our Application instance $facebook = new Facebook(array( 'appId' => '123', 'secret' => '123' )); // Get User ID $user = $facebook->getUser(); // Get Login URL $loginUrl = $facebook->getLoginUrl(array( "scope" => "email,user_education_history,user_work_history", "redirect_uri" => "http://www.mydomain.com/login/facebook_connect/" )); $data['fb_login_url'] = $loginUrl; $this->load->view('splash', $data); 

PHP 코드 페이지 사용자의 페이스 북 인증 후 리디렉션됩니다

* HTTP : //www.mydomain.com/login/ facebook_connect/*

require 'libs/fb-php-sdk/facebook.php'; 

    $facebook = new Facebook(array(
     'appId' => '123', 
     'secret' => '123', 
    )); 

    // See if there is a user from a cookie 
    $user = $facebook->getUser(); 

    // We may or may not have this data based on whether the user is logged in. 
    // 
    // If we have a $user id here, it means we know the user is logged into 
    // Facebook, but we don't know if the access token is valid. An access 
    // token is invalid if the user logged out of Facebook. 

    if ($user) { 
     try { 
     // Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me'); 
     } catch (FacebookApiException $e) { 
     error_log($e); 
     $user = null; 
     } 
    } 

    print_r($user_profile); 
    echo $user; 
+0

facebook이 사이트로 리디렉션 될 때 전체 URL을 확인 했습니까? access_token 매개 변수가 있어야합니다. –

+0

'next' 대신'redirect_uri'를 사용하여 리디렉션이 정상적으로 작동합니다. 'HTTP :? – Nyxynyx

+0

이것은 내가 다시 페이스 북 인증 페이지에서 내 사이트에 리디렉션 후 도착 URL입니다 //www.mydomain.com/facebook_pickup.php 상태 = f210c06a9854f43edd12bdb57993e1da 및 코드 = AQCUp3YsSVNa2LfnKR1EXr_wq3BapIHJ5qr7nNury0fJQidb-nnkn2ZIxImMvN92CtiLwkZTmmzWelv9Lt8EDor2Q2YmKSDI6OoFTiNe8OZdDLLO5YATYA4-Bc1_y8qOcwOzq8-gzj4u__BwuLJLJFYe4e4plXgREYK6EbTXB872QCtz2aiSen0dpHPSdkfXncs # _ = _'가 access_token 매개 변수가 없습니다 ... – Nyxynyx

답변

1

$ facebook-> getUser()는 쿠키를 사용하여 사용자를 얻습니다. CodeIgniter 또는 PHP가 자동으로 할당 한 쿠키를 "먹는"라이브러리를 사용하는 경우 CI 외부로 프록시 리디렉션을 다시 가져와 쿠키를 다시 가져와야합니다.(인 print_r 제거)

http://www.mydomain.com/facebook_pickup.php 

스크립트에서 아무것도 표시하지 않습니다 즉

는 현재 당신이 코드에 걸릴

http://www.mydomain.com/login/facebook_connect/ 

에 가지고 일반 PHP 파일의 복사본을 생성

http://www.mydomain.com/login/facebook_connect/ 

으로 리디렉션하면 마술처럼 작동하기 시작합니다.

+0

Codeigniter가 해당 컨트롤러 기능을 위해 쿠키를 자동으로 먹는 것을 막기위한 방법이 있습니까? – Nyxynyx

+0

'http : // www.mydomain.com/facebook_pickup.php'에 포함시킬 수 있습니까? $ facebook = new Facebook (배열 ( 'appId '=>'123 ', 'secret '=>'123 ', )); // 쿠키에서 사용자가 있는지 확인하십시오. $ user = $ facebook-> getUser(); ' '여전히 http://www.mydomain.com/login/facebook_connect의 $ facebook 및 $ user에 액세스합니다. 2 차 리디렉션 후에 /? – Nyxynyx

2

모두 맞는 것 같습니다.

질문 :
1.- http://www.mydomain.com/에는 모든 스크립트가 포함되어 있다고 가정합니다. 맞습니까?
2.- codeigniter를 사용하고 있습니까? 또는 codeigniter 기반 CMS? 이 경우 세션 문제가있을 수 있습니다 (CI에서 매우 일반적입니다). 그것을 확인하고 우리는 계속 ...


편집 2 : 쿠키 관련 문제의 경우.

enter image description here

그래서 당신이 생성되는 방법 페이스 북의 쿠키를 확인할 수 있습니다 쉽게 쿠키를 추적하는 쿠키 모듈에 불을 지르고 사용할 수있는 다음은 이미지가 보이고있다.


편집 3 : 확인. 따라서 CI를 사용하고 있으며 FB 쿠키가 삭제되고 있습니다. 어쩌면 세션 문제 일 수 있습니다. 여기에 related answer이 있는데,이 모든 종류의 고통스러운 문제를 일반적으로 해결하는 세션 CI 라이브러리 대체 방법을 설명합니다. 저를 믿으십시오, 그것을 시도하십시오! 당신이 몇 가지 해킹을하게해야 오래된 라이브러리 인해 것을, Codeigniter's Native session가 b.-

(하단에 다운로드 링크가있다)하지만 :

는 a.- 여기있다. library's forum

c.에서 간단한 해킹을 확인할 수 있습니다.이 파일을 codeigniter의 라이브러리 디렉토리에 드롭하면됩니다.

+0

예 Codeigniter를 사용하고 있습니다! – Nyxynyx

+0

:) 나는 그것을 알고 있었다! 대답은 밀라노 Babuškov에 의해 아주 독창적 인 것으로 보인다 준다. 작동하지 않는다면 세션 기반 솔루션을 추천 할 수 있습니다. 나는 여기에있을거야 ... –

+0

Codeigniter가 facebook 쿠키를 삭제하는 이유는 무엇입니까? 페이스 북이 내 websiste를 위해 사용자를 인증 한 직후 페이스 북이 설정 한 쿠키가 있었습니까? 아니면 PHP SDK가 쿠키를 설정 했습니까? – Nyxynyx