我们正试图解决一些用户使用Facebook登录遇到的问题(使用facebook/php-graph-sdk
)。
Cross-site request forgery validation failed. Required param "state" missing from persistent data.
我们认为我们已经很好地实施了SDK,我们确保在session_create()
之前调用$fb->getRedirectLoginHelper()
。该问题可能与Safari的第三方Cookie策略有关,因此会话在登录请求和回调请求之间丢失。
StackOverflow中已经有很多关于此问题的问题,但似乎所有人都建议使用请求的FBRLH_state
参数的值覆盖state
会话变量。
$_SESSION['FBRLH_state'] = $_GET['state'];
但是,这会禁用SDK提供的CSRF保护。所以,我们的问题是,如果我们决定禁用Facebook登录的CSRF保护,会发生什么情况更糟?对于重定向和JavaScript帮助程序。