2010-05-10 3 views
4

실행 example code for the Facebook API null 세션 객체가 생기고 코드에 주석을 제공하는 null이 아닌 객체를 가져와야합니다. 내가 뭘 잘못 했니? 즉

, 내 index.php를의 예제 코드에서이 조각은 을 보여줍니다 "아니오 세션" 내 브라우저에서 http://apps.facebook.com/my_app에 갈 때 :

<?php 

require './facebook.php'; 

// Create our Application instance. 
$facebook = new Facebook(array(
    'appId' => '...', // actual value replaced by '...' for this post 
    'secret' => '...', // actual value replaced by '...' for the post 
    'cookie' => true, 
)); 

// We may or may not have this data based on a $_GET or $_COOKIE based session. 
// 
// If we get a session here, it means we found a correctly signed session using 
// the Application Secret only Facebook and the Application know. We dont know 
// if it is still valid until we make an API call using the session. A session 
// can become invalid if it has already expired (should not be getting the 
// session back in this case) or if the user logged out of Facebook. 
$session = $facebook->getSession(); 

if ($session) { 
    echo "session ok"; 
} 
else { 
    echo "no session"; 
} 


?> 

참고 : 내 서버의 인덱스. php와 facebook.php는 같은 폴더에 있습니다.

+0

인사를

  • 앱 선택 "내 응용 프로그램"개발자 페이지로 이동 토토, 나도 같은 문제가있어. 그러나 광산은 캔버스 페이지가 아닙니다. 그것은 내 PHP 파일에 있습니다. 어떻게 해결했는지 알아?전에 페이스 북에 로그인해야합니다. 감사. – davidlee

  • 답변

    3

    아직 앱을 연결하셨습니까?

    if ($session) { 
        $logoutUrl = $facebook->getLogoutUrl(); 
    } else { 
        $loginUrl = $facebook->getLoginUrl(); 
    } 
    <?php if ($me): ?> 
    <a href="<?php echo $logoutUrl; ?>"> 
    <img src="http://static.ak.fbcdn.net/rsrc.php/z2Y31/hash/cxrz4k7j.gif"> 
    </a> 
    <?php else: ?> 
    <div> 
    Using JavaScript &amp; XFBML: <fb:login-button></fb:login-button> 
    </div> 
    <div> 
    Without using JavaScript &amp; XFBML: 
    <a href="<?php echo $loginUrl; ?>"> 
    <img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif"> 
    </a> 
    </div> 
    <?php endif ?> 
    

    코드는 제공하신 링크에서 가져 왔습니다.

    +0

    Gazler, 저는 이제 혼란 스러워요. 예제 코드 (onw I linked)는 캔버스 프레임이 아닌 내 사이트에서 사용하도록 고안되었습니다. 저는 캔버스 프레임을 테스트 중이므로 다른 사이트에서 페이스 북 인증을 제공하는 데 관심이 없습니다. – mmutilva

    +0

    자신의 사이트에서 사용하기 위해 세션을 생성하고 액세스 권한을 설정하는 Facebook으로 인증해야합니다. – Gazler

    +0

    이 예제 코드는 여전히 저에게 적합하지 않습니다. 로그인/로그 아웃 이미지가 보이지 않을뿐만 아니라 링크에 텍스트를 넣어서 볼 수있어서 로그인 할 때 내 iframe을 추악한 facebook.com 링크로 리디렉션합니다. _that_을 클릭하면 로그인 할 수 있고 내 프로필로 리디렉션됩니다. 애플리케이션으로 돌아 가면 애플리케이션 상태가 변경되지 않습니다. 아직 세션이 없습니다. –

    1

    아직 답을 얻지 못했는지는 확실하지 않지만 여기를 직접 확인해 보았습니다. 사용자가 페이스 북에 로그인 한 경우에도 세션을 처음 시도하면 null이됩니다. 내가 찾은 예제 애플리케이션은 양식에 로그인 버튼을 배치합니다. 그렇다면 이미 페이스 북에 로그인되어 있어도 버튼을 클릭해야합니다. 다시 묻지는 않지만 추가 사용자 작업입니다.

    그래서 내 애플 리케이션과 포럼에서 발견 된 여러 다른 사람들을 위해 일한 것은 로그인 URL로 리다이렉트하는 것입니다. (URL을 검사 할 경우, 매개 변수 중 하나는 "return_session = 1"입니다.) 다시 돌아 오면 세션이 있으며 정상적으로 진행될 수 있습니다.

    내 응용 프로그램에서 응용 프로그램 토큰이없는 경우 해당 세션을 가져올 수 없으므로 응용 프로그램 토큰을 먼저 가져야합니다. 응용 프로그램 토큰을 얻으려면 http://forum.developers.facebook.com/viewtopic.php?id=56789의 뛰어난 설명을보고 2010 년 5 월 7 일 dynamoman의 게시물 (약 4 번째 게시물).

    내가 겪었던 한 가지 사실은 인증이 "다음"페이지인지 여부와 상관없이 캔버스에 구성된 페이지로 이동한다는 것입니다. 따라서 3 개의 페이지가 분리되어있는 대신 캔버스 콜백 URL이 2 개 뿐이므로 캔버스 콜백 URL은 어느 상태에서든지 처리해야합니다.

    실제 코드는 프레임 워크 안에 있으므로 직접 적용 할 수 없습니다.

    landing page: 
        if the facebook api token is not loaded, 
         redirect to the authorization url 
        try to load the user id // to validate that the session 
        if the user id is not loaded, 
         redirect to the loginurl from the facebook api 
        // if it reaches here, then we have both an api token and a session 
    
    authorization page: 
        get authorization token // see the post for how to do that 
        redirect back to the page configured as the canvas url 
    

    더 나은 방법이있을 수 있으며, 좀 더 자신이 더 나은 해결책을 가지고 할 수있는 것보다이 잘 알고, 또는 포스트 일반적인 코드를 확인 사람이야 : 알고리즘, 그것은이다.

    +0

    다른 하나의 노트 - 응용 프로그램 키가 아니라 페이스 북 객체를 만들 때 응용 프로그램 ID를 사용해야합니다. 인증 URL에는 키가 필요하지만 facebook 객체에는 appid가 있어야합니다. –

    +0

    세션에 내장 된 access_token이 있다는 것이 판명 되었기 때문에 전체 인증 작업을 수행 할 필요가 없어야한다고 생각합니다. 그러나 나는 그것을 제거 할 수 없었고 여전히 작동하도록했습니다 - 아마도 나는 기본적인 것을 잃어 버렸을 것입니다. –

    3

    그것은 나를 위해 일한 http://forum.developers.facebook.net/viewtopic.php?pid=267627

    에서 포스트 # 8을 확인하시기 바랍니다. 사용자 "standardcombo"감사합니다.

    귀하의 편의를 위해 여기에 복사했습니다.

    1. 는 '편집 설정'
    2. 고급> 마이그레이션> 활성화 "캔버스의 OAuth 2.0 (베타)"
    +0

    확인했습니다. 나에게 맞는 유일한 해결책이었습니다. – nyusternie

    관련 문제