Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-SDK Facebook身份验证不断重定向_Php_Facebook_Facebook Php Sdk - Fatal编程技术网

PHP-SDK Facebook身份验证不断重定向

PHP-SDK Facebook身份验证不断重定向,php,facebook,facebook-php-sdk,Php,Facebook,Facebook Php Sdk,我正在尝试将Facebook整合到我正在开发的web应用程序中。我从Facebook获得了一个api密钥和一个密钥,并将网站Url设置为 以下代码用于检测用户是否已连接: $facebook = new Facebook(array( 'appId' => FB_APIKEY, 'secret' => FB_SECRETKEY, 'cookie' => true ));

我正在尝试将Facebook整合到我正在开发的web应用程序中。我从Facebook获得了一个api密钥和一个密钥,并将网站Url设置为

以下代码用于检测用户是否已连接:

        $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\uURL时,它会不断地重定向回去,从而创建一个无限循环

重定向url为:

我已经研究了其他类似的问题,也在谷歌上,并尝试了他们的解决方案,但都没有帮到我

[更新]

好吧,我想我知道了什么。如果我以不同的Facebook用户身份登录,我就不会在循环中被重定向。这似乎只有在我使用自己的Facebook帐户时才会发生,该帐户是应用程序的管理员。但是在重定向之后,它应该返回getUser()right。。但出于某种原因,它没有


有什么想法吗?谢谢。

看起来您正在使用旧版本的PHPSDK,其中的代码旨在与最新版本一起使用。将PHP SDK升级至最新版本v3.1.1

那么代码应该可以工作了


您是否尝试指定重定向uri:

<?php
    $loginUrl = $facebook->getLoginUrl(
        array( 'redirect_uri' => 'http://www.mysite.com/something/app/' )
    );
?>


目标url背后的脚本需要创建一个facebook对象实例,以便用户会话得以持久化。

我在某些浏览器上遇到过这个问题,最终由于阻止站点设置的cookie而导致浏览器故障,从而导致会话中断

尝试将此添加到您的页面:

header('P3P: CP="CAO PSA OUR"');

(它是PHP,你也可以通过HTML在meta标记上完成)

我从服务器根目录下的一个新的.PHP文件开始。那里一切正常,所以我发现我自己的代码导致网页重定向


事实上,是我的.htaccess文件中的mod_重写把事情搞砸了。不知何故,它没有拾取FB设置的GET变量。所以我需要想办法解决这个问题。但至少我现在知道是什么导致了这个问题。案件结案

我也有同样的问题。当我尝试使用当前服务器中另一台服务器上的相同代码(最新的FB SDK)时,出现了无限重定向循环

当我开始调试它时,我发现原因是当前服务器的
$\u请求
似乎没有处理
$\u GET
中的值。因此,
$\u GET['state']
$\u GET['code']
都不会在
$\u请求中读取。在
base\u facebook.php
中,似乎他们使用
$\u REQUEST
而不是
$\u GET
来获取代码和状态值

因此,简单的解决方法是包含以下代码:

$_REQUEST['state'] = $_GET['state'];
$_REQUEST['code'] = $_GET['code'];
在facebook SDK文件的
require_一次之前


希望这能帮助一些人

我这里也有同样的问题。 下面是一个简单的代码,它在单个站点上运行,并且尽可能简单:

@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>'; 
}
@ini\u集('log\u errors','On');//启用或禁用php错误日志记录(使用“开”或“关”)
@ini_集('display_errors','On');//启用或禁用错误的公共显示(使用“开”或“关”)
包括_once('lib/facebook.php');
//创建我们的应用程序实例
$config=array(
“appId”=>“xx”,
“机密”=>“yyy”
);
$link='1http://someurl.com';
$facebook=newfacebook($config);
//获取用户ID
$user=$facebook->getUser();
如果($user){?>
登录


事实并非如此,我使用的是最新版本。如果我将getUser替换为getSession,我会得到一个致命错误,因为方法getSession不存在。您问题中的登录url看起来与新SDK创建的url不同。如果您使用的是新SDK,则看起来没有将
签名的\u请求
传递到您的脚本。登录url应该是正确的,请查看最新版本3.1.1的example.php中的第49行:他们也在使用getLoginUrl。不知道signed_请求参数可能出了什么问题。是否尝试添加其他重定向_uri?(请参阅更新的答案)。另外,要明确的是,这是一个网站,而不是Facebook画布应用程序?这确实是一个网站,而不是FB画布应用程序。我曾尝试按照您的建议设置重定向uri,但它仍在不断循环重定向。现在重定向url是什么?当您以管理员和其他用户身份登录时是否相同?请确保您使用的是d不同的url作为一个
redirect\u uri
而不是您正在检查登录用户的url。您可以在此基础上展开吗?我遇到同样的问题,但只有RewriteCond%{REQUEST\u FILENAME}!-f RewriteRule^(.*)$index.php[QSA,L]php\u flag display\u in.htaccess上的错误这也不能帮我。你在哪里添加这个?你应该在你的php文件中添加它,因为头应该先发送。我这样做了,撤销了对应用程序的访问权,重新启动了我的登录流,现在它可以工作了,谢谢!谢谢。我也面临同样的问题。但它有点像奇怪。为什么会有这样的差异?我如何在facebook画布之外运行它?