Facebook登录错误.“;状态“;URL和会话中的param不匹配


Facebook login Error. The "state" param from the URL and session do not match

使用facebookSDK登录应用程序时出错。

错误显示:"跨站点请求伪造验证失败。URL和会话中的"state"参数不匹配"

这不是关于丢失session_start()或双重执行getLoginUrl()

我刚做了一个测试,发现我的.htaccess有问题。当.htaccess在服务器上时,FB登录返回错误。如果没有.htaccess,它就可以正常工作。

Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

这里怎么了?

这就是为什么你必须把你的用户带回来,并总是在你的网站的www版本中。如果你只使用mypage.com,你必须始终使用www.mypage.com来验证你登录到你的facebook。在您使用$loginUrl作为SDK Facebook文档示例的部分中,您必须重定向到用户并将其带回同一页面。

我的意思是,如果你在你的url中放了myexample.com/logincallback.php,而你把用户带到了www.myeexample.com/loginallback.php的版本中,你就永远不会完成对facebook的验证。我将展示一个例子:

    $helper = $fb->getRedirectLoginHelper();
    $permissions = ['email']; 
    $loginUrl = $helper->getLoginUrl('www.mywebsite.com/logincallback.php', $permissions ); 

完成此代码后,您必须转到developers.facebook.com中的设置应用程序,并在"设置">"高级">"取消授权回调URL "中配置网站的www版本

在此字段中,写入http://www.mywebsite.com/logincallback.php

因此,如果您使用htaccess将页面重定向到网站的www版本,请确保在取消授权回调URL和getLoginUrl()中使用相同的URL

问候。

插入此代码

$_SESSION['FBRLH_state']=$_GET['state'];

之后

$helper = $fb->getRedirectLoginHelper();

只需为Facebook登录创建一个静态页面,并通过"使用Facebook登录"按钮调用该页面。在Facebook登录页面中,获取登录url并重定向。它会起到最好的作用。查看博客文章的全文。http://www.shozab.com/facebook-login-callback-error-cross-site-request-forgery-validation-failed/