2012-02-14 11 views
2

FacebookのOAuthが私の心を揺らしています...再び。私たちは、かなりストレートフォワードシステムを持っている:カスタマイズされたREDIRECT_URIユーザーが戻って私たちにリダイレクトされるビア Facebookのredirect_uriはOAuthの後でユーザーを認識しません

    1. ユーザーは、Facebookの権限(壁に書いて、基本的なユーザー情報+延長許可)「を受ける」にはOAuthを使用していますユーザー情報がデータベースに格納され、ユーザーは、独自のログインシステムを使用して「ログイン」されているプラ​​ットフォームもあります。

    しかし、問題は時々(私は繰り返します:時々...)ユーザーが$ user = $ facebook-> getUser()で認識されないことです。要求。 $ userが設定されている場合にのみ、ユーザーは認証され、$ facebook-> api( '/ me')を使用できることがわかっているので、データベースに格納されます。

    最初の試行後にユーザーにエラーが表示されますが、[Facebookでログイン]を再度クリックすると、すべてうまく行きます。また、すべてのユーザーがこの問題を経験するわけではありません。私は、ログイン/アカウント作成のすべての処理を実行する際に、自分のコードがログインしたユーザーを「認識」していないと感じています。

    本当に誰でも助けてくれることを願っています。コードを投稿しました。

     
    
        INITIATION: 
    
        $loginUrl = $facebook->getLoginUrl(array('scope' => 'friends_relationships,publish_stream,email,user_birthday,user_location,user_checkins,user_education_history,user_photos','redirect_uri' => 'REDIRECTED_PAGE.php')); 
    
        RETURN PAGE (REDIRECT_PAGE.PHP) 
    
        $fbuser = $facebook->getUser(); 
    
        if ($fbuser) { 
         try { 
         $user_profile = $facebook->api('/me'); 
         } catch (FacebookApiException $e) { 
         error_log($e); 
         $fbuser = null; 
         } 
        } 
    
        $uid = $user_profile['id']; 
    
        // -> here's the problem: $fbuser is either 0 or not set 
    
        if (isset($fbuser) && $fbuser != '0') 
        { 
        $dbc = new DBC(); 
        $dbc->connect(0, true); 
        $fbemailquery = $dbc->executeQuery("SELECT * FROM users WHERE fbuid = '".$uid."'"); 
        if(!$dbc->isResultEmpty($fbemailquery)) { 
    
         // USER IS KNOWN, SO LOGIN 
    
        } 
        else { 
    
         // NEW USER 
    
         $firstname = $user_profile['first_name']; // etc etc 
        } 
        $dbc->close(); 
        } 
    
    
  • +0

    解決できましたか?はいの場合は、どのように共有してください。 –

    答えて

    0

    Facebookアプリケーションは本当に難しいです。あなたはあなたのサイトから直接アプリケーションに入っていますか?またはあなたは内部のFacebookのアプリケーションを使用していますか? (apps.facebook.com/applicationなど)。私はfacebook.comがあなた自身のサイトにいるかfacebook.comに直接行っているかによって、facebookが認証を扱う異なる仕組みを持っているので、これを尋ねます。最初に$ _REQUEST ['code']に埋め込まれたアクセスコードを取得するように求められますあなたが後でアクセストークン(あなたが要求している権限を持つ)を交換することができます。しかし、facebook.comでアクセスしている場合は、アプリケーションのキャンバスURLにPOST経由で送られてきたsigned_requestがあります。このコードは、内部にバンドルされているaccess_codeを取得するためにデコードする必要があります。ユーザーがあなたのアプリを辞退しました)。

    関連する問題