facebook php登录CSRF
我正在尝试用php构建一个facebook用户登录。我能够获取用户信息,但每次登录都会在我的服务器上创建一个错误日志facebook php登录CSRF,php,facebook,csrf,Php,Facebook,Csrf,我正在尝试用php构建一个facebook用户登录。我能够获取用户信息,但每次登录都会在我的服务器上创建一个错误日志CSRF状态令牌与提供的不匹配。登录成功后 我在谷歌找到了很多创建facebook登录的教程。我也发现了一些其他的帖子,同样的问题。他们似乎责怪多次调用getLoginUrl(),而我并没有这样做。由于我使用的是sdk附带的示例,我不明白为什么它会被拆开 <?php require 'facebook.php'; $facebook = new Facebo
CSRF状态令牌与提供的不匹配。
登录成功后
我在谷歌找到了很多创建facebook登录的教程。我也发现了一些其他的帖子,同样的问题。他们似乎责怪多次调用getLoginUrl(),而我并没有这样做。由于我使用的是sdk附带的示例,我不明白为什么它会被拆开
<?php
require 'facebook.php';
$facebook = new Facebook(array(
'appId' => 'APP_ID',
'secret' => 'APP_SECRET',
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
$logoutUrl = $facebook->getLogoutUrl();
echo "<a href=" . $logoutUrl . ">Logout</a><br><br>";
print_r($user_profile);
}
catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
else {
$loginUrl = $facebook->getLoginUrl();
echo "<a href=" . $loginUrl . ">Login</a>";
}
?>
Facebook SDK代码在同一处理程序中两次检查令牌时出现错误 我编辑了
facebook.php
的getCode函数,如下所示:
protected function getCode() {
if (!isset($_REQUEST['code']) || !isset($_REQUEST['state']) || $this->state === null) {
return false;
}
if ($this->state === $_REQUEST['state']) {
// CSRF state has done its job, so clear it
$this->state = null;
$this->clearPersistentData('state');
return $_REQUEST['code'];
}
self::errorLog('CSRF state token does not match one provided.');
return false;
}
更清楚地说,如果调用两次,不会声明无效令牌
为了清楚起见,可以在同一url处理程序上调用函数两次,例如:
$facebook->getUser()
然后在同一个处理程序中$facebook->getLogoutUrl()
然后调用getCode()
两次,从而产生无效的错误消息您是否在facebook开发者网站的应用程序设置中允许您的URL?是的,我允许。任何我能找到的地方都可以放置一个我已经进入我的域名的URL。