javascript - Facebook PHP SDK V4 : two login buttons

标签 javascript php facebook sdk

我想在我的页面上有两个登录按钮。我不太熟悉SDK的编码,这可能吗?

一个按钮工作正常,但第二个按钮不行。它只是将 url 更改为 index.php?code=wKdOAOLK... 而无需登录。

有什么解决办法吗?

代码:

// added in v4.0.0
require './facebook-sdk/autoload.php';

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
use Facebook\GraphUser;

// start session

// init app with app id and secret
FacebookSession::setDefaultApplication( 'x','x' );

// login helper with redirect_uri

$helper = new FacebookRedirectLoginHelper('http://localhost/' );

try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
// When Facebook returns an error
} catch( Exception $ex ) {
// When validation fails or other local issues
}



// see if we have a session 
if ( isset( $session ) ) {   
...
}

按钮,两者代码相同:

<?php echo '<a href="' . $helper->getLoginUrl() . '"><img src="facebook.png"></a>'; ?>

<?php echo '<a href="' . $helper->getLoginUrl() . '"><img src="facebook.png"></a>'; ?>

最佳答案

Facebook 在登录过程中使用 state 参数来防止 CSRF 攻击。该参数是存储到 session 中的随机值,并在下一步中检查是否匹配。

现在,getLoginUrl 方法每次调用时都会为 state 生成一个随机值。因此,通过调用此方法两次,您将生成两个不同随机state值,因此第二个值会覆盖存储在 session 中的第一个值,因此最终只有一个其中一个将匹配,而另一个则不会,因此会导致错误。

因此,不要调用 getLoginUrl 两次,而是调用一次,存储返回的 URL,并且仅输出两次。

$facebookLoginURL = $helper->getLoginUrl();

<?php echo '<a href="' . $facebookLoginURL . '"><img src="facebook.png"></a>'; ?>

<?php echo '<a href="' . $facebookLoginURL . '"><img src="facebook.png"></a>'; ?>

关于javascript - Facebook PHP SDK V4 : two login buttons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705641/

相关文章:

javascript - CSS 文件未正确链接

javascript - 如何从 JS 中的 PHP 查询中过滤生成的列表?

javascript - 如果在右侧则滚动 (jQuery)

javascript - FB.login 问题,需要显示灯箱而不是弹出窗口、Javascript SDK、iFrame 应用程序

javascript - Javascript 方法在 JSFiddle 中不起作用

php - WordPress:安装后更改语言

php - bind_param 错误 - 类型定义字符串中的元素数量与绑定(bind)变量的数量不匹配

php - MySQL 按观看次数最多的方式对图像进行排序

ios - Facebook 无需登录即可获取自定义对象的点赞数

facebook - 使用 facebook API 检索完整的 friend 列表