facebook登录手机$fb_user=$facebook->getUser()在第一次加载时不工作,但在浏览器上工作正常

facebook登录手机$fb_user=$facebook->getUser()在第一次加载时不工作,但在浏览器上工作正常,facebook,mobile,login,Facebook,Mobile,Login,当移动用户尝试fb登录到我的网站时,我遇到了一个问题,而登录在桌面浏览器上工作正常。我已经在facebook应用程序开发部分将移动URL设置为与浏览器相同 在第一次加载时,它无法获得“$fb_user=$facebook->getUser;”它返回一个0,然后重新加载,因为它第一次没有登录,然后我用“CSRF状态令牌与提供的令牌不匹配”获取fb信息。然后我有另一次重新加载,它不会再次接收fb_用户,因此会卡在这个登录/不登录循环中。在普通浏览器中,它第一次接收$fb_用户,然后随后的代码处理重定

当移动用户尝试fb登录到我的网站时,我遇到了一个问题,而登录在桌面浏览器上工作正常。我已经在facebook应用程序开发部分将移动URL设置为与浏览器相同

在第一次加载时,它无法获得“$fb_user=$facebook->getUser;”它返回一个0,然后重新加载,因为它第一次没有登录,然后我用“CSRF状态令牌与提供的令牌不匹配”获取fb信息。然后我有另一次重新加载,它不会再次接收fb_用户,因此会卡在这个登录/不登录循环中。在普通浏览器中,它第一次接收$fb_用户,然后随后的代码处理重定向和所有

fb代码如下所示:

function fb_fresh() {

  global $user, $loginUrl;

  //Add the FB library code. This is version 3.1.1. have updated this to the latest version as of 10 Sept 2012
  $path_fb = "sites/all/modules/custom/fb/facebook.php";
  require_once $path_fb;  //make sure curl is installed to work

  // Create our Application instance. (not revealed for obvious reasons)
    $facebook = new Facebook(array('appId' => '###','secret' => '###','cookie' => true,));

  // Get User array
  $fb_user = $facebook->getUser();
  //printing error logs to see where things go wrong.. 
  error_log("function fb(). fbuser = " . $fb_user . ". Drupal user->uid = " . $user->uid, 0);


  // $fb_user = 0 when no logged-in user. https://developers.facebook.com/docs/reference/php/facebook-getUser/
  if ($fb_user != "0") {
    $logoutUrl = $facebook->getLogoutUrl();
    $sessionURL = "<a href='" . $logoutUrl . "' target='_top'>Logout</a>";
  } else {

      //Get the permissions + once the user has accepted permissions send them to a page that redirects them back to the Facebook app, which then automatically goes to the mobile version if necessary
      $params_login = array(
          'scope' => 'email, user_location, friends_location, user_status, friends_status, user_checkins, user_work_history, user_education_history, user_birthday, user_relationships, friends_checkins',
          'redirect_uri' => 'https://' . $_SERVER['HTTP_HOST'] . '/fb_redirect', 
      );

      $loginUrl = $facebook->getLoginUrl($params_login);
      $sessionURL = "<a href='" . $loginUrl . "' target='_top'>Login</a>";


      //this triggers fb dialog box when app request is sent and if user goes to certain page without logging in. works fine.

      if ($fb_user == 0 && arg(0) == 'page') {
        print "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
        error_log("function fb(). JS redirect to LOGIN URL triggered..", 0); //loginUrl = " . $loginUrl

        //clear session variables to start over 
        unset($_SESSION);
        error_log("function fb(). clear session ", 0);

      }

    error_log("function fb(). NOT logged in.", 0); //loginUrl = " . $loginUrl
  }


  if ($fb_user) {

    try {

      $access_token = $facebook->getAccessToken();
      $facebook->setAccessToken($access_token);

      //Proceed knowing you have a logged in user who's authenticated.
      //Save facebook data as session variables
      $_SESSION['user_profile'] = $facebook->api('/me');
      $_SESSION['user_relationships'] = $facebook->api('/me/family'); 
      $_SESSION['user_friends'] = $facebook->api('/me/friends');
      $_SESSION['user_checkins'] = $facebook->api('/me/statuses');


      error_log("function fb(). fbuser = " . $fb_user . ". facebook user_profile->id = " . $_SESSION["user_profile"]["id"], 0);

      return array($_SESSION['user_profile'], $_SESSION['user_relationships'], $_SESSION['user_checkins'], $_SESSION['user_friends'], 1);


    } catch (FacebookApiException $e) {

      error_log("function fb(). " . $e);

    }
  }

  return array(false, false, false, false, false);
}