[英]PHP-SDK Facebook auth keeps redirecting
我正在尝试将Facebook集成到我正在开发的Web应用程序中。 我从Facebook获得了api密钥和秘密密钥,并将站点网址设置为http://www.mysite.com/something/app/
来自http://www.mysite.com/something/app/signup/xxxx/的以下代码用于检测用户是否已连接:
$facebook = new Facebook(array(
'appId' => FB_APIKEY,
'secret' => FB_SECRETKEY,
'cookie' => true
));
$session = $facebook->getUser();
if($session) {
# Active session, let's try getting the user id (getUser()) and user info (api->('/me'))
try{
$uid = $facebook->getUser();
$user = $facebook->api('/me');
} catch (Exception $e){}
if(!empty($user)){
# User info ok? Let's print it (Here we will be adding the login and registering routines)
echo $user;
} else {
# For testing purposes, if there was an error, let's kill the script
die("There was an error.");
}
} else {
# There's no active session, let's generate one
$login_url = $facebook->getLoginUrl();
header("Location: ".$login_url);
}
但是问题是,当用户被重定向到$ login_url时,它将不断地向后重定向,从而形成无限循环。
重定向网址为: https : //www.facebook.com/connect/uiserver.php?app_id=xxxxxxxxxxx&method=permissions.request&display=page& next=http% 3A% 2F%2Fwww.something.com%2Fsomething%2Fapp%2Fsignup% 2Fxxxxx %2F&RESPONSE_TYPE =代码&状态= 6f51768c22974a16b5dcf4d8dc7f46df&fbconnect = 1
我在SO上以及Google上都看过其他类似的问题,并尝试过他们的解决方案,但这并没有帮助我。
[UPDATE]
好吧,我想我正在做某事。 如果我以其他Facebook用户身份登录,则不会被循环重定向。 似乎只有当我使用自己的Facebook帐户(该应用程序的管理员)时才会发生。 但是在重定向之后,它应该正确返回getUser()。但是由于某种原因,它没有。
有任何想法吗? 谢谢。
我从服务器的根目录开始从一个新的.php文件开始。 一切正常,所以我发现自己的代码导致网页重定向。
实际上,正是我的.htaccess文件中的mod_rewrite弄得一团糟。 不知何故,它没有选择FB设置的GET变量。 所以我需要弄清楚一些东西。 但是至少我现在知道是什么原因引起的。 结案!
我刚遇到同样的问题。 当我尝试使用与当前服务器中的另一台服务器相同的代码(最新的FB SDK)时,发生了无限重定向循环。
当我开始调试它时,我发现原因是因为当前服务器$_REQUEST
似乎$_REQUEST
$_GET
中的值。 因此, $_GET['state']
和$_GET['code']
都不会在$_REQUEST
读取。 在base_facebook.php
,似乎他们使用$_REQUEST
而不是$_GET
来获取代码和状态值。
因此,对此的简单解决方法是包括以下代码:
$_REQUEST['state'] = $_GET['state'];
$_REQUEST['code'] = $_GET['code'];
在facebook SDK文件的require_once
之前。
希望这会帮助一些人!
我在这里遇到同样的问题。 这是一个简单的代码,它在单个站点上运行,并且非常简单:
@ini_set('log_errors','On'); // enable or disable php error logging (use 'On' or 'Off')
@ini_set('display_errors','On'); // enable or disable public display of errors (use 'On' or 'Off')
include_once('lib/facebook.php');
// Create our application instance
$config = array(
'appId' => 'xx',
'secret' => 'yyy'
);
$link = 'http://someurl.com';
$facebook = new Facebook($config);
// Get User ID
$user = $facebook->getUser();
if($user){ ?>
<p>logged in</p>
<?php } else {
$loginUrl = $facebook->getLoginUrl(array(
'scope' => 'manage_pages,email',
'redirect_uri' => $link,
));
echo '<a href="'.$loginUrl.'">Login with FB</a>';
}
所以id会做什么,它会显示用户未登录时登录的链接(或者是特定的-如果getUser()无法接收任何内容),以及带有文本的段落(如果getUser给出了应提供的内容)。
简单的测试将显示一个问题。 即使授予用户权限,通过站点url访问它也会显示登录URL而不是段落。
问题出在哪儿? 在尝试弄清楚时,我将网站的网址添加为“ Facebook上的应用”,以便可以从Facebook内部访问它。 还有eureka,如果通过这种方式(通过Canvas Page url)进行访问,则getUser()可以正常工作。 更重要的是,一旦您通过“画布页面” URL链接进行了访问,然后直接访问了站点,则getUser()也可以正常工作。
那么渔获量在哪里? 尝试使用浏览器的隐身功能时,我已经想到otu,用户浏览器中存储了一些内容。 直接从浏览器访问网站(用户已经在“画布页面” URL上)显示正确的响应,而在浏览器上用户没有访问“画布页面” URL时,显示登录URL。
因此,它暗示了问题是与浏览器缓存有关,Facebook在访问整个页面而不是Canvas页面本身时未设置正确的方式。
有人有一个想法如何纠正仅与php sdk一起使用的问题吗?
编辑也,当给应用程序访问权限时,当用户单击登录链接时,重定向将以状态和代码作为_GET参数返回到原始页面。
您似乎正在使用旧版本的PHP SDK,并且该代码应与最新版本一起使用。 将PHP SDK升级到最新版本-v3.1.1
https://github.com/facebook/php-sdk
然后该代码应该起作用。
您是否尝试过指定重定向uri:
<?php
$loginUrl = $facebook->getLoginUrl(
array( 'redirect_uri' => 'http://www.mysite.com/something/app/' )
);
?>
目标网址后面的脚本需要创建一个Facebook对象实例,以使用户会话持久化。
我在某些浏览器上遇到了这个问题,最终由于阻止站点设置的cookie以及会话而导致了浏览器故障。
尝试将其添加到您的页面:
header('P3P: CP="CAO PSA OUR"');
(它是PHP,您也可以通过HTML在meta标记上执行此操作)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.