Facebook将php-sdk-v4升级至graph sdk v5,在弹出窗口中登录

Facebook将php-sdk-v4升级至graph sdk v5,在弹出窗口中登录,php,facebook,login,sdk,facebook-graph-api-v2.8,Php,Facebook,Login,Sdk,Facebook Graph Api V2.8,我正在尝试将Facebook php-sdk-v4升级到graph sdk,在遵循文档中的所有步骤之后,我遇到了一个问题。这个想法,这是我们一直在做的,就是让他用他的FB帐户登录我们的网站。但现在,v5需要accessToken,当尝试获取它时($helper->getAccessToken())会返回$\u get['code']。碰巧我们的程序是在弹出窗口(colorbox)中打开FB登录页面,首先它会抱怨无法获取“代码”,但如果我在新选项卡中打开它,url的“代码”参数为$\u get m

我正在尝试将Facebook php-sdk-v4升级到graph sdk,在遵循文档中的所有步骤之后,我遇到了一个问题。这个想法,这是我们一直在做的,就是让他用他的FB帐户登录我们的网站。但现在,v5需要accessToken,当尝试获取它时($helper->getAccessToken())会返回$\u get['code']。碰巧我们的程序是在弹出窗口(colorbox)中打开FB登录页面,首先它会抱怨无法获取“代码”,但如果我在新选项卡中打开它,url的“代码”参数为$\u get method,则会出现此异常: Facebook\Exceptions\FacebookSDKException:跨站点请求伪造验证失败。持久数据中缺少必需的参数“状态”

这是通过弹出窗口解决的,因为它使makeUrl()保持不变(在持久中插入“state”),但url没有“code”作为url参数。所以一种方法解决了另一种方法存在的问题,反之亦然

哈尔普


编辑:我使用redis在facebookPersistence类中获取并设置这些参数,它解决了这个问题

最简单的方法:使用JSSDK及其
FB.login
方法触发原始的Facebook登录弹出窗口。然后,PHPSDK可以通过共享cookie识别登录@CBroe我已经有了FB.login,但它不会触发任何弹出窗口,即使我按照文档中的说明进行了修改,您必须在用户交互(如单击)时直接调用它-否则,如果调用是间接的(例如嵌套在另一个异步方法调用的回调中),它很可能会被弹出窗口阻止程序阻止。@CBroe是,它被称为onClick