Ped*_*que 16 sdk state facebook login param
在facebook documantion中
require('include/facebook/autoload.php'); //SDK directory
$fb = new Facebook\Facebook([
'app_id' => '***********',
'app_secret' => '***********************'
]);
$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'public_profile']; // optional
$loginUrl = $helper->getLoginUrl('http://www.meusite.com.br/login-callback.php', $permissions);
Run Code Online (Sandbox Code Playgroud)
当它指向url $ loginUrl时,返回的是:Facebook SDK返回错误:跨站点请求伪造验证失败.来自URL和会话的"状态"参数不匹配
tas*_*ski 28
我有同样的错误.
出现问题的原因是我在getAccessToken()之前执行了getLoginUrl(... )
所以在重定向的URL中摆脱getLoginUrl(...)并且代码应该可行.
gau*_*mar 17
我有同样的问题,对我来说发生错误是因为我没有在调用getLoginUrl(..)之前session_start();输入我的login.php页面代码 ,也在login-callback.php页面的顶部.
只需session_start();输入您的" 登录 "页面和" 登录回调 "页面,它就可以正常工作,就像它现在为我工作一样.
小智 6
这个错误可能有两个原因:
session_start();之前getLoginUrl调用getLoginUrl再次执行login-callback.php,因此状态值重新生成并与重定向的值不匹配这个问题让我有点困惑,因为我必须在 facebook src 文件中更改一行:
src/Facebook/Helpers/FacebookRedirectLoginHelper.php
Run Code Online (Sandbox Code Playgroud)
在函数:“validateCsrf”中,如下所示:
if ($result !== 0) {
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
}
Run Code Online (Sandbox Code Playgroud)
并将其更改为:
if ($result === 0) {
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否违反了 facebook SDK 的安全性,所以我真的愿意接受对此答案的任何解释或建议。
您还可以在 Facebook 应用程序管理器中进行以下更改:
将您的网站和回调 URL 添加到您的 Facebook 应用程序帐户中:
setting->advanced:Valid OAuth redirect URIs
Run Code Online (Sandbox Code Playgroud)
不要忘记在每个 url 末尾添加另一个带有斜杠 (/) 的 url,并选中“客户端 OAuth 设置”中的所有 4 个复选框。
| 归档时间: |
|
| 查看次数: |
31363 次 |
| 最近记录: |