繁体   English   中英

Facebook SDK-其余部分使用JS进行身份验证并使用PHP?

[英]Facebook SDK - Using JS to Auth and PHP for the rest?

我试图将Facebook PHP和JS SDK一起使用,以创建一个将其用作画布应用程序的Web应用程序。 在当前设置中,当页面离开一会儿时,我会遇到问题,并且系统返回到登录屏幕。 重要的是不要不使用动态域映射器,并且用户可能会访问并体验该应用程序的可能URL / dev /,/ dev / pool /,/ dev / pool / edit /等。

我四处阅读,发现使用JS SDK进行授权是正确的方法(我可能错了吗?),然后使用PHP SDK对其他所有内容进行排序都可以找到,并且自然会获得访问令牌。

我知道这对我的身份验证设置有问题,因为有时我会看到它重新加载,而且我还陷入了一个登录按钮,如果我在子页面上并且如果我不触摸该网站,则该按钮将不起作用几分钟后,系统无缘无故地尝试重新认证。

关于我在做什么错的任何想法吗? 谢谢!

这是我网站上设置的JS:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId: 'XXXXX',
      channelUrl: 'http://www.domain.com/channel.php',
      status: true,
      cookie: true,
      xfbml: true,
      oauth: true,
    });
    FB.Event.subscribe('auth.login', function(response) {
      alert('refreshing')
      window.location.reload();
    });
    FB.Event.subscribe('auth.logout', function(response) {
      window.location.reload();
    });
    FB.Canvas.setSize({ width: 810 });
    FB.Canvas.setAutoGrow();

  };

  (function(d, debug){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js";
     ref.parentNode.insertBefore(js, ref);
   }(document, /*debug*/ true));
</script>

这是调用Facebook对象的PHP流程

$fb = new FbDoa();
if ($fb->isAuthed() === false) {
  echo $fb->getLoginButton();
}
else {
  echo $fb->getProfileInfo();
}

这是FbDoa对象( $fb )的PHP内容:

public function __construct() {
  require_once(Facebook/facebook.php');
  $this->facebook = new Facebook(array(
    'appId'  => 'XXXXX',
    'secret' => 'XXXXXXXXXX', 
    'cookie' => true,
  ));

  $this->user = $this->facebook->getUser();
  if ($this->user) {
    try {
      // Proceed knowing you have a logged in user who's authenticated.
      $this->user_profile = $this->facebook->api('/me');
    } catch (FacebookApiException $e) {
      //echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
      $this->user = null;
    }
  }
}

public function isAuthed() {
  if ($this->user) {
    return true;
  }
  else {
    return false;
  }
}

public function getLoginButton() {
  $scope = 'email,user_likes,friends_likes,publish_actions,publish_stream,read_friendlists';
  return '<fb:login-button size="xlarge" perms="'.$scope.'"></fb:login-button>';
} 

public function getProfileInfo() {
  return $this->user_profile;
}


更新1:确实看起来像window.location.reload(); 没有做任何事情,如果我一遍又一遍地按登录按钮,什么也没发生,但是我刷新了它的工作原理。 确实,应用程序的身份验证应该持续两分钟以上,这意味着我面前还有一些问题。 有任何想法吗?

更新2:问题可能出在我的服务器端代码上? 有人知道PHP + JS SDK吗?

已签名的请求将保存在类似于fbsr_appid的cookie中。 由此,您可以使用code来处理它。 这是您的流程的外观

Auth混合流

只要您的应用设置中包含基本网址,它就应重定向到所有网址。

暂无
暂无

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

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