Facebook OAUTH2 и PHP / JSDK - PullRequest
       4

Facebook OAUTH2 и PHP / JSDK

1 голос
/ 02 октября 2011

Я зарегистрировался в auth.login, чтобы выполнить обратный вызов ajax на мой сервер и обновить счетчики входа. он не работает, так как php sdk решительно отказывается видеть, что пользователь правильно вошел в систему.

JS код:

    window.fbAsyncInit = function () {
    var channelurl='http://'+window.location.hostname+'/channel.html';
        FB.init({
            appId : window.appid,
            status: true,
            cookie: true,
            xfbml: true,
            channelURL : channelurl, // channel.html file
            oauth  : true // enable OAuth 2.0
        });
        FB.Event.subscribe('auth.login', function (response) {

                   $("#fbconnecttext").html("<a>Logging in...</v>");

                   $.ajax({
                      url: "fbupdatelogincount",
                      type: "GET",
                      cache: false,
                      success: function (html) {
                          window.setTimeout('$("#fbconnecttext").html("")', 10000);
                          var rec = JSON.parse(html);
                          window.numlogins = rec["numlogins"];
                          FB.api('/me', function (response) {
                             if (window.numlogins > 1) {
                                 $("#fbconnecttext").html(window.welcomebacktext.replace("%s", response.first_name));
                                 $("#fbadminimg").attr("src", "common-images/smiley");
                             }
                             else {
                                 alert(window.firstlogintext.replace("%s", response.first_name));
                             }

                             });

                      }
                      });
               });

        FB.Event.subscribe('auth.logout', function (response) {
                   $("#fbconnecttext").html(window.fbconnecttext);
                   $("#fb-like").show();
                   FB.XFBML.parse($('#fb-like').is());
               });
        FB.Event.subscribe('auth.sessionChange', function (response) {});
    };

(function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "http://connect.facebook.net/en_US/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));
}

Страница php

require_once("utils.php");
logText("In  fbUpdatelogincount");
if(fbAuthentication()){
    logText("authenticated in  fbUpdatelogincount");
    $r=fbUpdateStats();
    if(isset($_REQUEST["field"]))
        echo $r[$_REQUEST["field"]];
    else
        echo json_encode($r);
}
echo "";

И, наконец, код fbAutentication:

function fbAuthentication(){

    global $facebook;
    $facebook = new Facebook(array(
                     'appId' => getSetting("fb:app_id"),
                     'secret' => getSetting("fb:secret")
                     ));
    if($facebook->getUser()){
        try {
            global $fb_isadmin,$fb_me;
            $fb_me = $facebook->api('/me');
            $fb_isadmin=strstr(getSetting("fb:admins"),$facebook->getUser())!=false;
            fbUpdateStats();
            return true;
        } catch (FacebookApiException $e) {
            /* exception handling todo */
        }
        return true;
    }else logText("No Valid user");

    return false;

}

Основная проблема - вызов ajax, запускающий url fbupdatelogincount, но сторона PHP говорит: «Нет, никто не вошел в систему». Есть идеи? Та же настройка работала нормально до 3.1.1

Ответы [ 2 ]

1 голос
/ 03 октября 2011

Это, похоже, нигде не задокументировано, но, похоже, что передача секрета приложения в событие auth.login вызывает успешное срабатывание.

Попробуйте это:

FB.Event.subscribe('auth.login', function(response) {
    // callback
}, { secret:'<?php print $facebook->getApiSecret(); ?>' });

Исходная проблема с тех пор была исправлена ​​Facebook.

0 голосов
/ 03 октября 2011

Я наконец нашел другое решение: в свой обратный вызов ajax я добавил accesstoken в качестве параметра GET, расшифровал его в URL-адресе php и затем вызвал $ facebook-> setAccessToken ($ at). Работает нормально сейчас. Так что это ошибка в новых SDK, работающих вместе. Что за день ...;) -

FB.Event.subscribe('auth.authResponseChange', function (response) {
    FB.XFBML.parse(document.getElementById('fb-like'));
    if (response.authResponse) {
    FB.api('/me', function(response) {
           // $("#fbconnecttext").html('<a class="fbUserName">'+response.first_name+'</a>');
           });
        $.ajax({
            url: "fbupdatelogincount?accesstoken="+response.authResponse.accessToken,
            type: "GET",
            success: function (html) {
                if (html) {
            var rec = JSON.parse(html);
                    window.numlogins = rec["numlogins"];
                    FB.api('/me', function (response) {
                        if (window.numlogins > 1) {
                            $("#fbconnecttext").html(window.welcomebacktext.replace("%s", response.first_name));
                            $("#fbadminimg").attr("src", "common-images/smiley");
                        }
                        else {
                            alert(window.firstlogintext.replace("%s", response.first_name));
                        }

                    });
                }

            }
        });
    }else{
    //logged out
    }
});
...