我有以下代码重定向用户登录到Facebook并尝试检索会话但会话为NULL:
<?php
session_start();
require 'vendor/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication('Foo', 'Bar');
$helper = new FacebookRedirectLoginHelper('Baz');
$loginUrl = $helper->getLoginUrl();
echo '<a href="' . $loginUrl . '">Log In</a>';
$session = $helper->getSessionFromRedirect();
// This displays [NULL] always
echo '[' . gettype($session) . ']';
?>
Run Code Online (Sandbox Code Playgroud)
我不明白为什么$ session总是为NULL.请帮忙.
bhu*_*hya 23
这是因为getLoginUrl()函数,
因为当我们提到与FB重定向页面相同的页面时,它
getLoginUrl()一次又一次地调用函数..它改变$this->state变量值然后
isValidRedirect()和getSessionFromRedirect()总是返回null
以下是与FB重定向页面使用相同页面的解决方案:
getLoginUrl()当facebook重定向到同一页面时不要打电话,只需添加正确的会话检查以检查有效的facebook会话(请参阅下面的代码示例)
session_start();
require("facebook/autoload.php");
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
FacebookSession::setDefaultApplication('appid84', '0secret0a626c6');
$helper = new FacebookRedirectLoginHelper('http://tmd.local/fblogin.php');
try {
$session = $helper->getSessionFromRedirect();
// var_dump($session);
} catch(FacebookRequestException $ex) {
} catch(\Exception $ex) {
}
if ($session) {
var_dump($session);
}
else
{
$loginUrl = $helper->getLoginUrl();
header("location:".$loginUrl);
exit;
}
Run Code Online (Sandbox Code Playgroud)
您应该只在Facebook登录后重定向用户的页面上调用getSessionFromRedirect.然后将该会话存储在某个地方,例如$ _SESSION,并在其他地方重新使用它.
问题是,当您再次生成登录URL时,它会更改用于防止CSRF的"状态"变量.
好的,所以目标是得到一个FacebookSession.需要有2个页面:1个用于显示"登录"链接,另一个用于接受实例FacebookSession.在page1.php中:
<?php
session_start();
require 'vendor/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication('foo', 'bar');
$helper = new FacebookRedirectLoginHelper('page2.php');
$loginUrl = $helper->getLoginUrl();
echo '<a href="' . $loginUrl . '">Log In</a>';
?>
Run Code Online (Sandbox Code Playgroud)
在page2.php中:
<?php
session_start();
require 'vendor/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
FacebookSession::setDefaultApplication('foo', 'bar');
$helper = new FacebookRedirectLoginHelper('page2.php');
// Now you have the session
$session = $helper->getSessionFromRedirect();
?>
Run Code Online (Sandbox Code Playgroud)
感谢Fosco的帮助.
| 归档时间: |
|
| 查看次数: |
14247 次 |
| 最近记录: |