使用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/