首页 文章

Facebook redirect_uri在OAuth之后无法识别用户

提问于
浏览
2

Facebook的OAuth令人难以置信......再次 . 我们有一个相当直接的系统:

  • 用户使用OAuth来'receive' Facebook权限(基本用户信息扩展权限:在墙上书写)

  • 通过自定义的redirect_uri,用户被重定向回我们的平台,其中用户信息存储在数据库中,用户也使用我们自己的登录系统标记'logged in' .

然而,问题是有时(我重复:有时......)用户无法通过$ 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();
    }

1 回答

  • 0

    Facebook应用程序确实很棘手 . 您是否直接通过您的网站输入申请?或者您使用的是内部Facebook应用程序? (比如apps.facebook.com/application) . 我问你这个因为facebook有一个不同的机制来处理身份验证,这取决于你是在你自己的网站上还是直接在facebook.com上第一个会要求你获得一个访问代码,这个代码嵌入在$ _REQUEST ['code']中var,您可以稍后交换访问令牌(具有您请求的权限) . 但是,如果您通过facebook.com访问,则会通过POST将signed_request发送到您的应用程序画布URL,您必须对其进行解码以获取捆绑在其中的access_code(如果用户已经授权您的应用程序)或不存在(如果用户拒绝了您的应用) .

相关问题