我刚开始使用Facebook API进行开发,所以提前感谢您耐心帮助我解决问题。
我正在使用 Facebook PHP SDK 3 来检查状态令牌和用户令牌代码以验证身份验证,但似乎它只有在我通过Facebook点击应用时才有效。
逐步更详细:
(1)删除应用程序权限>要重新开始并尝试进行故障排除我登录Facebook并删除我对应用程序的用户访问权限,以便系统再次提示我接受权限。
(2)刷新网页应用>然后我刷新我的应用程序,它不知道我有一个Facebook会话!
当我登录Facebook时,应用程序是否应该至少能够看到我的Facebook用户ID?
从我的用户删除应用程序是否导致应用程序失去所有访问权限?
(3)退出Facebook,刷新应用>由于这不起作用,我退出Facebook并刷新我的网络应用程序重新开始。
根据$ user信息生成Facebook登录或退出链接
public function run(){
$FB = &$this->getFacebook();
$user = $FB->getUser();
$user_dat = $FB->api('/me');
$logoutUrl = $FB->getLoginUrl(array('scope'=> $fbPermissions,'redirect_uri'=> $appBaseURL));
$loginUrl = $FB->getLogoutUrl();
?>
<h1>php-sdk</h1>
<?php if ($user): ?>
<a href="<?php echo $logoutUrl; ?>">Logout</a>
<?php else: ?>
<div>
Login using OAuth 2.0 handled by the PHP SDK:
<a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
</div>
<?php endif ?>
<?php if ($user): ?>
<h3>You</h3>
<img src="https://graph.facebook.com/<?php echo $user; ?>/picture">
<h3>Your User Object (/me)</h3>
<pre><?php print_r($user_dat); ?></pre>
<?php else: ?>
<strong><em>You are not Connected.</em></strong>
<?php endif ?>
<?php } ?>
(4)点击生成的登录链接&gt; FB登录链接在我的网络应用程序(Facebook外)生成我点击它并重定向到Facebook登录。
生成的登录网址
https://www.facebook.com/login.php?
api_key=112233445566778
&skip_api_login=1
&display=page&
cancel_url=http://www.mywebapp.com/app/beta/?error_reason=user_denied&error=access_denied
&error_description=The+user+denied+your+request.
&state=99ff88cc33dd77aa11bb00cc2266dd11
&fbconnect=1
&next=https://www.facebook.com/connect/uiserver.php?method=permissions.request
&app_id=112233445566778
&display=page
&redirect_uri=http://www.mywebapp.com/app/beta/?response_type=code&state=99ff88cc33dd77aa11bb00cc2266dd11
&fbconnect=1
&perms=user_about_me,user_activities,user_likes,email,user_online_presence,read_friendlists,manage_notifications,publish_stream
&from_login=1
&rcount=1
(5)登录Facebook,允许应用权限&gt;我登录然后它然后要求我允许我的应用程序的权限,我点击“允许”,Facebook通过此URL将我重定向回我的应用程序。
http://www.mywebapp.com/app/beta/?
code=ABCxxx
&state=b3f5efffc496b3f5efff38e32604e3
然而,当我回到应用程序时,我的服务器错误日志会发出错误消息:
[error] ***CSRF state token does not match one provided.***
应用程序认为我还没有登录,也没有显示任何用户信息!
在用户通过Ouath接受应用程序权限后,应用程序的状态令牌看起来与Facebook返回的状态令牌不匹配。
在这种情况下,我作为登录链接的一部分发送的状态令牌是:
state=9655d77aa198fc0a29774694134dd0c7
然后facebook用状态令牌将我重定向回我的应用程序!
state=b3f5efffa4169f3c4b816838e32604f5
我发送的令牌实际上看起来像上一个会话中的令牌,所以我想我可能需要在再次登录之前清除会话信息。这似乎不是在Facebook SDK中发生的,所以我需要自己实现吗?
(6)在Facebook上刷新Web应用程序&gt;然后,为了确保我不疯狂,我去Facebook,看到我登录,然后我通过Facebook点击网络应用程序
http://apps.facebook.com/mywebapp/
你知道什么,我的应用程序显示了我的所有用户信息,用户访问令牌以及Facebook内的所有内容,但是= /
(7)刷新独立应用&gt;然后我回到我的webapp - 刷新它 - 现在它也有所有信息!
我无法使用PHP SDK登录我的应用程序有什么问题?
为什么我的应用程序在不在应用程序上时看不到Facebook用户ID?
答案 0 :(得分:2)
这真的很愚蠢,但基本上API已被打破。 Facebook最近解决了这个问题,现在我不再遇到这些问题! = /