我已经为FB建立了一个画布游戏,我现在想让用户登录到它使用他们的Facebook帐户。
我正在使用我自己的帐户进行测试(这是应用程序的管理员帐户,它仍然不向公众开放)。如果用户尚未授权应用程序,则使用以下代码创建授权对话框的URL:
$data['fb_url'] = $this->facebook->getLoginUrl(array(
'scope'=>'email, user_friends',
'redirect_uri'=>'https://apps.facebook.com/appname/',
'display'=>'page'
));这将重定向正常,并显示授权对话框。但是,在我点击对话框上的“立即播放”后,出现了一个问题。即使该应用程序已添加到我的应用程序中心,我也无法访问它。它重定向到我提供的URL (这是FB上的应用程序页面),但随后又重定向回授权页面。此重定向仅在用户尚未授权应用程序时才会发生。
在页面上,我使用原生SDK函数来获取登录的FB用户的ID:
$userId = $this->facebook->getUser();但是,这将返回0,因此无限的重定向循环将继续。
这是授权重定向到的确切URL:
https://apps.facebook.com/appname/?code=AQCwk7n6AljygSC1ekxJKFqJjAZF6PyCFECzgaYciAQIJWt10o7LatWSlMUkAqiesI2MHAh4zWAxcCgWP1-WpF19H8qb6CNUKS11-rrbN4un02QkT6_P8KcHVVfD-0ppUkbrPjWopB1TbKABO0SlZESJEpFOAKdOUUr0LoLoIcYgJ_7FA4MaVcSQs438QzmZGudPeDRskSWtc6dy0-PmUUHPEYxcjPRyUUDG5VbVruIUwsX6Lco4Qi55K-kaNiHZrEOkbpo8UUhEGF5MfrbssNJqgQ5sz-fq-hvCoy9ppTsx6wo0N-cXAUWnBCGOmn0IWE4&state=e2bda7a95d2e2cfb7b104c83defda0e4#_=_发布于 2014-06-12 21:03:00
$userId = $this->facebook->getUser(); 将始终返回0,除非用户已授权您的应用程序,否则您可以获取getloginurl()
if(empty($_GET['code'])
{
//show login url
}将重定向uri更改为您的网站
发布于 2014-06-19 01:27:23
我对$this->facebook->getUser();不太确定,你们有最新版本吗?它是Version 4,我在那里看到的示例代码与您正在使用的不同,顺便说一句,这让我想起了一个较旧的版本。它们获取当前用户的代码如下所示,如Github Repository的自述文件中所述:
$me = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo $me->getName();我不确定这是否是问题所在,因为我没有为Facebook使用任何库。我认为链接到新版本的库可能会很有用。我不认为空变量是问题所在,因为据我所知,旧的库没有检查code变量的存在,而是用来检查您是否有登录的用户,并且可能编程检查URL中是否有变量的部分在login函数中(我可能是错的,因为我最后一次从Facebook库中读取代码是在几年前)。此外,如果这就是问题所在,它应该根本不会工作,但第一个重定向是可以的。我要说的是,在获取用户方面存在问题。
编辑在浏览与公认解决方案相关的问题时,我发现了this answer。可能是$this伪变量,当我看到它的时候,我没有相信它,当你试图获取用户时,无论你使用的是什么库,你的结果都会有问题吗?
发布于 2014-06-22 22:18:58
您使用的是CodeIgniter,它会删除Facebook PHP SDK用来检索OAuth代码参数的$_REQUEST。
诀窍是在调用$facebook->getUser()之前将$_GET复制到$_REQUEST
$_REQUEST += $_GET;
$userId = $this->facebook->getUser();或者,不要使用CodeIgniter或使用FB SDK的版本,该版本已被调整为可用于CI。
https://stackoverflow.com/questions/24185033
复制相似问题