首先,我意识到这个问题之前已被问过,但解决原始问题的答案中没有一个对我有用,所以这就是我提出新问题的原因。
我使用FB PHP SDK V4将用户注册到我的Web应用程序。它工作正常,但几周前它突然停止工作。我不能说它是单独存在还是一些无关的错误修正我做了那个意外破坏它。
$ helper-> getSessionFromRedirect()不起作用 - 它总是返回null而没有错误,即使从FB重定向后,也会导致重定向循环。我附上了注册代码。
Facebook\FacebookSession::setDefaultApplication('{app_id}', '{app_secret}');
$helper = new Facebook\FacebookRedirectLoginHelper('https://www.someurl.domain/sign/registerFacebook');
try {
$session = $helper->getSessionFromRedirect();
} catch(\Facebook\FacebookRequestException $ex) {
$this->flashMessage('Nastala chyba při komunikaci se servery facebooku.', 'error');
} catch(\Exception $ex) {
$this->flashMessage('Registrace účtu se nezdařila. Zkuste registraci provéct znovu.', 'error');
}
if(!isset($session) || !$session) {
$loginUrl = $helper->getLoginUrl(array('scope' => 'user_about_me','user_birthday'));
$this->redirectUrl($loginUrl);
} else {
$user_profile = (new Facebook\FacebookRequest($session, 'GET', '/me'))
->execute()->getGraphObject(Facebook\GraphUser::className());
// business code for pre-filling registration form
}
有问题的代码在try {}块内,$ session始终为空,即使在第二次调用此方法之后(从Facebook重定向后)。
我已经尝试过:
我怀疑它与HTTPS有关,因为此前该网络应用程序已经转换为加密流量。但是应用程序总是对每个请求使用HTTPS,并且我在FB上的应用程序设置中有HTTPS,所以我没有看到它有什么问题。
有人可以帮忙吗?我非常感激!
谢谢,Johny
答案 0 :(得分:0)
在您的情况下,sdk成功设置了会话密钥FBRLH_state
,但由于non-www
域问题而未能检索和验证。
这是因为生成登录网址的脚本位于非www上,而您传递给getLoginUrl()
功能的login-callback.php网址是您网站的www版本,反之亦然。