Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 getLoginUrl随机不工作_Php_Facebook_Login_Facebook Php Sdk - Fatal编程技术网

Php getLoginUrl随机不工作

Php getLoginUrl随机不工作,php,facebook,login,facebook-php-sdk,Php,Facebook,Login,Facebook Php Sdk,我有一个Facebook应用程序,我在其中授权用户使用PHP SDK。它大部分时间都有效,但有时无效,我不明白为什么 我正在使用下面的代码。首先,我检查是否有用户以及是否有有效的令牌(通过请求“/me”)。如果是,我退出并显示应用程序。如果没有,我将生成一个带有getLoginUrl()的链接,并显示该链接 当它不起作用时,脚本会继续显示此链接。没有错误消息,没有信息说明它为什么不工作 我试着打印$\u GET变量,我看到Facebook在我的URL中添加了两个查询参数:“state”和“cod

我有一个Facebook应用程序,我在其中授权用户使用PHP SDK。它大部分时间都有效,但有时无效,我不明白为什么

我正在使用下面的代码。首先,我检查是否有用户以及是否有有效的令牌(通过请求“/me”)。如果是,我退出并显示应用程序。如果没有,我将生成一个带有
getLoginUrl()
的链接,并显示该链接

当它不起作用时,脚本会继续显示此链接。没有错误消息,没有信息说明它为什么不工作

我试着打印
$\u GET
变量,我看到Facebook在我的URL中添加了两个查询参数:“state”和“code”。有人知道他们是什么吗

还知道为什么下面的脚本不起作用吗?是否有什么我可以检查以确保它始终有效

$fb_ = new Facebook(array(
    'appId'  => 'appid',
    'secret' => 'secret',
)); 

$userId = $fb_->getUser();
$errorMessage = null;

if ($userId) {
    try {
        $user_ = $fb_->api('/me');
        if (isset($user_['error_code'])) {
            $errorMessage = isset($user_['error_msg']) ? self::$user_['error_msg'] : 'An unknown error occurred';
            $errorMessage .= ' (' . $user_['error_code'] . ')';
            $user_ = null;
        }
    } catch (FacebookApiException $e) {
        $errorMessage = $e->getMessage();
        $user_ = null;
    }
}

if ($user_) return;

$loginUrl = $fb_->getLoginUrl(array(
    'scope' => 'publish_stream,publish_actions'
));

echo '<!doctype html>';
echo '<html xmlns:fb="http://www.facebook.com/2008/fbml">';
echo '<head>';
echo '<title>' . t('Login to Facebook application') . '</title>';
echo '</head>';
echo '<body>';
if ($errorMessage) echo t('Error: %1', $errorMessage) . '<br/>';
echo t('Please login with Facebook first: %1', '<a href="' . $loginUrl . '">' . t('Login with Facebook') . '</a>');
echo '</body>';
echo '</html>';
die();
我从Facebook得到的回应是:

Cache-Control:private, no-cache, no-store, must-revalidate
Content-Length:0
Content-Type:text/html; charset=utf-8
Date:Tue, 17 Apr 2012 07:47:38 GMT
Expires:Sat, 01 Jan 2000 00:00:00 GMT
Location:http://mxcclient.emarkethink.net/login?state=ebe2785a859a96e76332935901c32c&code=AQAN-0ZXg_apegtybid642HOXbU2n5MNl8fYWcPGXiCoFyG7ogJpr53aKBaQKNKz-2wTtPQLpbJd8jAA1fkyw4Kw40Ssylc0b3kFrhnexGJgID8JX-pJEQvKC6wLYL93lQzrA6qFRnS2R6pd0dq-xGLy3YQ-6INC0vQyN_Qhi00M3oAo95b2IeBg4_11E#_=_
P3P:CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma:no-cache
Set-Cookie:locale=en_US; expires=Tue, 24-Apr-2012 07:47:38 GMT; path=/; domain=.facebook.com
X-Cnection:close
X-Content-Type-Options:nosniff
X-FB-Debug:Wnqw6loUBt4vRR21t7Btve/FPWWrfeoXDxhgiHA=
X-XSS-Protection:0

好的,终于找到了问题所在:

  • 它在Internet Explorer上不工作,因为应用程序在iframe中运行,并且未设置P3策略

  • 由于第三方cookie被阻止(在iframe中运行的应用程序被视为“第三方”),所以它在Google Chrome上不起作用

因此,在这两种情况下,登录都成功,但无法保存授权令牌,这意味着以下请求失败

Cache-Control:private, no-cache, no-store, must-revalidate
Content-Length:0
Content-Type:text/html; charset=utf-8
Date:Tue, 17 Apr 2012 07:47:38 GMT
Expires:Sat, 01 Jan 2000 00:00:00 GMT
Location:http://mxcclient.emarkethink.net/login?state=ebe2785a859a96e76332935901c32c&code=AQAN-0ZXg_apegtybid642HOXbU2n5MNl8fYWcPGXiCoFyG7ogJpr53aKBaQKNKz-2wTtPQLpbJd8jAA1fkyw4Kw40Ssylc0b3kFrhnexGJgID8JX-pJEQvKC6wLYL93lQzrA6qFRnS2R6pd0dq-xGLy3YQ-6INC0vQyN_Qhi00M3oAo95b2IeBg4_11E#_=_
P3P:CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma:no-cache
Set-Cookie:locale=en_US; expires=Tue, 24-Apr-2012 07:47:38 GMT; path=/; domain=.facebook.com
X-Cnection:close
X-Content-Type-Options:nosniff
X-FB-Debug:Wnqw6loUBt4vRR21t7Btve/FPWWrfeoXDxhgiHA=
X-XSS-Protection:0