我正在尝试将Facebook PHP和JS SDK一起使用,以便创建一个兼具画布应用程序的Web应用程序。在当前设置中,当页面处于离开或暂停状态时,我遇到问题,系统将恢复到登录屏幕。重要的是我没有使用动态域映射器,并且有一些可能的URL / dev /,/ dev / pool /,/ dev / pool / edit /等,用户可能会访问并体验应用程序。< / p>
我阅读并发现使用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?
答案 0 :(得分:0)
已签名的请求保存在类似于fbsr_appid
的Cookie中。从那里你可以使用code
来处理它。以下是您的流程应该如何
只要您的应用设置中有基本网址,就应该重定向到所有网址。