我正在尝试构建canvas iframe application for Facebook。该应用需要做几件事:
Facebook建议将所有新应用构建为iframe应用,因此使用此API。 我已下载PHP SDK并将示例安装为我的应用程序。
我很困惑为什么example.php向用户提供登录按钮 - 是不是当前用户已经登录到Facebook?
我当前的解决方案将用户重定向到http://graph.facebook.com/oauth/authorize进行授权,然后抓取OAuth令牌(稍后发布消息)并返回Facebook画布中的应用程序页面。
这真的是让当前Facebook用户与我的应用相关联的唯一途径,并获得以后发布消息的权限吗?
答案 0 :(得分:1)
如果您想在服务器端获取当前登录用户,我发现这样做的最佳方法是尝试进行API调用:
try {
$response = $facebook->api('/me');
}
catch (FacebookApiException $e) {
//User not logged in
}
如果通话成功,您现在可以访问登录的用户ID,访问令牌,名称和其他一些基本内容(例如$ facebook-> getUser()或$ facebook-> getSession()) 。否则,如果您发现FacebookApiException,则表示用户未登录,并且需要重定向用户以获取访问令牌。最简单的方法是重定向到$ facebook-> getLoginUrl()(http://github.com/facebook/php-sdk/blob/master/src/facebook.php第322行)返回的网址,您可以传入所需的权限:
$facebook->getLoginUrl(
array('req_params' => 'email,publish_stream',
'next' => 'http://www.redirct-upon-login.com',
'cancel' => 'http://www.redirect-if-user-clicks-cancel'));
你基本上可以在Javascript中做同样的事情(我更喜欢,因为有一个弹出对话框/窗口而不是重定向):
FB.login(function(response) {
if (response.session) {
if (response.perms.indexOf('publish_stream') != -1) {
//User has logged in and given us publish_stream permissions
);
else {
//User has logged in but not given us publish_stream
}
}
else {
//User is not logged in
}, {perms:'offline_access,publish_stream'});
要回答关于example.php的其他问题,看起来只有在没有用户登录时才会显示登录按钮。否则,它会显示一个注销按钮。
关于重定向,这基本上是OAuth需要工作的方式,如果它是为了安全地允许第三方代表用户采取行动(例如,您的应用程序发布在用户的墙上)。 Facebook需要用户批准您的第三方应用程序以采取行动,因此需要用户证明他/她的身份才能正常运行(否则您可能只是冒充用户)。 Facebook也需要成为一个好的,不是你的应用程序(因此重定向到Facebook的网站),因为如果你的应用程序可以只为用户说话,它就不会很安全。虽然我会同意这是一个痛苦,Facebook的文档对此毫无帮助。
答案 1 :(得分:0)
了解新SDK的getLoginUrl()
和getLogoutUrl()
方法是对用户授予或删除指定权限所需的URL的引用很有帮助 - 不实际登录或退出传统意义上的任何东西。
但是,由于登录或退出站点表明权限发生了变化,因此术语有点适用。
请查看有关javascript身份验证的relevant post。
答案 2 :(得分:0)
您可以使用JS SDK自定义显示该按钮的文本(如果您刚开始使用Canvas应用程序,我强烈推荐使用该文本):
<fb:login-button size="medium">Authorize MyCoolApp</fb:login-button>
例如:http://apps.facebook.com/fbrelll/xfbml/fb:login-button。
您提到的OAuth方法也可以正常使用。