简体   繁体   English

Facebook OAUTH2和PHP / JSDK

[英]Facebook OAUTH2 and PHP/JSDK

I have registered with auth.login in order to do an ajax call back to my server and update login counts. 我已经向auth.login注册,以便对我的服务器进行ajax调用并更新登录计数。 it doesnt work as the php sdk is resolutely refusing to see that the user is properly logged in. 它不起作用,因为php sdk坚决拒绝看到用户已正确登录。

JS code: 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));
}

The php page 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 "";

And finally the fbAutentication code: 最后是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;

}

The main issue is the ajax call firing up the url fbupdatelogincount but the PHP side saying "nope, no one is logged in". 主要问题是ajax调用启动了URL fbupdatelogincount,但是PHP方面说“不,没有人登录”。 Any ideas? 有任何想法吗? Same setup worked fine prior to 3.1.1 相同的设置在3.1.1之前运行良好

This doesn't seem to be documented anywhere, but it seems that passing the application secret to the auth.login event causes it to fire successfully. 似乎未在任何地方对此进行记录,但似乎将应用程序密钥传递给auth.login事件会导致它成功启动。

Try this: 尝试这个:

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

The original issue has since been fixed by Facebook. 此后,原始问题已由Facebook修复。

I finally found another solution : in my ajax call back I added the accesstoken as a GET parameter, decoded it at the php url and then called $facebook->setAccessToken($at). 我终于找到了另一个解决方案:在我的Ajax回调中,我将accesstoken作为GET参数添加,在php url处对其进行解码,然后调用$ facebook-> setAccessToken($ at)。 Works fine now. 现在工作正常。 So it IS a bug in the new SDKs working together. 因此,这是新的SDK协同工作时的错误。 What a day... ;) – 哪一天...;)–

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
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM