为啥 $helper->getSessionFromRedirect() 总是返回 NULL?
Posted
技术标签:
【中文标题】为啥 $helper->getSessionFromRedirect() 总是返回 NULL?【英文标题】:Why is $helper->getSessionFromRedirect() always returning NULL?为什么 $helper->getSessionFromRedirect() 总是返回 NULL? 【发布时间】:2015-05-12 22:58:21 【问题描述】:我有这段代码,它运行了好几个月。突然,生产环境停止工作,$helper->getSessionFromRedirect()
现在总是返回 NULL
值。
登录表单页面 (index.php)
require 'vendor/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication(123456, 'a1b2c3d4e5');
$helper = new FacebookRedirectLoginHelper('http://domain.com/login.php');
$scope = array('email');
$loginUrl = $helper->getLoginUrl($scope);
echo '<a href="'.$loginUrl.'">Login</a>';
登录处理 (login.php)
require 'vendor/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication(123456,'a1b2c3d4e5');
$helper = new FacebookRedirectLoginHelper('http://domain.com/login.php');
try
# success
$session = $helper->getSessionFromRedirect();
catch(FacebookRequestException $ex)
# when Facebook returns an error
catch(\Exception $ex)
# when validation fails or other local issues
if($session)
# do something with user data
$me = (new FacebookRequest($session, 'GET', '/me'))->execute()->getGraphObject(GraphUser::className());
# redirect to user profile page
header('Location: http://domain.com/profile.php');
exit();
else
# $session is always NULL with this code :(
这个正在在我的测试应用上运行,但它在我的生产应用 ID 上不起作用。当然,它们之间的唯一区别是 App ID 和 Secret ID 值。我已经确定我在关注Facebook instructions。另外,我用的是Facebook PHP SDK 4的最新版本。
【问题讨论】:
【参考方案1】:经过长时间的诊断,我发现存在差异。由于我使用的是 Cloudflare 的 SSL 功能,所以最初的 $helper = new FacebookRedirectLoginHelper('http://domain.com/login.php');
请求是使用 http:80 发出的,但第二个 $helper = new FacebookRedirectLoginHelper('http://domain.com/login.php');
是使用 https:443 发出的……这会向 Facebook 返回一个不匹配的签名,这会导致$session
变量中的 NULL 值。
TL;DR在向 fb 发出请求时不要混合使用 http 和 https。
【讨论】:
谢谢,这不完全是我的问题,但它给了我一个想法。我在没有 www 的情况下访问该网站,并且 facebook 被重定向到 www。不知道这很重要以上是关于为啥 $helper->getSessionFromRedirect() 总是返回 NULL?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Ruby on Rails 的 URL Helper 在我的 URL 中加上句点?