0

我正在尝试使用 Facebook 的默认 PHP 网站集成和身份验证。当用户登录时,我可以请求权限以从用户那里获取各种信息。


这个问题有点老了。请注意 harkirat1892 的评论。

“如果有人使用 Facebook SDK v4.4 遇到这个问题,那么 Dhiraj 的答案在这种情况下将不起作用,因为有一个小的变化。您不必在传递给 getLoginUrl 的数组中包含 redirect_uri。

根据 v4.4,getLoginUrl 应该像这样工作:

$loginUrl = $facebook->getLoginUrl(
array(
    'scope'         => 'email,user_checkins, user_birthday'
)
);

可以在此处找到各种范围:Facebook 权限。”


很容易弄清楚如何使用 JavaScript 来做到这一点,但我很困惑在 PHP 示例中指定范围的位置。

基本上,我只想请求访问他们的电子邮件和位置以及其他一些信息的权限。

这是我正在使用的代码:(稍作修改,但几乎与他们所拥有的完全匹配。)

<?php
    define('YOUR_APP_ID', '---------');
    define('YOUR_APP_SECRET', '------------');

    //Uses the PHP SDK.  Download from https://github.com/facebook/php-sdk
    require 'facebook.php';

    $facebook = new Facebook(array(
      'appId'  => YOUR_APP_ID,
      'secret' => YOUR_APP_SECRET,
    ));

    $FBUID = $facebook->getUser();
?>

<?php  if ($FBUID) {
    $userInfo = $facebook->api('/' + $FBUID); ?>

<?php $FBName = $userInfo['name'];?>
    <!--
      Welcome <? // = $userInfo['name'] ?> -->

<?php } else { ?>
    <div id="fb-root"></div>
    <fb:login-button></fb:login-button>
<?php } ?>

    <script>
        window.fbAsyncInit = function() {
            FB.init({
                appId      : '---------------',
                status     : true,
                cookie     : true,
                xfbml      : true,
                oauth      : true,
            });

            FB.Event.subscribe('auth.login', function(response) {
                window.location.reload();
            });
        };

        (function(d){
            var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
            js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/en_US/all.js";
            d.getElementsByTagName('head')[0].appendChild(js);
         }(document));
    </script>
4

4 回答 4

2

这是您通常在PHP中指定范围的方式(查看文档):

$facebook = new Facebook(array(
    'appId'  => AppInfo::appID(),
    'secret' => AppInfo::appSecret(),
));

$loginUrl = $facebook->getLoginUrl(
    array(
        'scope'         => 'read_stream,publish_stream,publish_actions,manage_pages,email,user_checkins',
        'redirect_uri'  => $redirectURI
    )
);

我希望这有帮助。

于 2012-06-09T07:31:54.953 回答
1

如果使用 Facebook SDK v4.4 的人偶然发现了这个问题,那么 Dhiraj 的答案在这种情况下将不起作用,因为有一个小的变化。您不必在传递给 getLoginUrl 的数组中包含 redirect_uri。

根据 v4.4,getLoginUrl 应该像这样工作:

$loginUrl = $facebook->getLoginUrl(
array(
    'scope'         => 'email, user_checkins, user_birthday'
)

);

可以在此处找到各种范围:Facebook 权限

于 2015-01-09T23:01:56.513 回答
1

上面的答案很好,但 Facebook 只是喜欢改变现状。在这个论坛上检查的最佳答案是针对 Facebook SDK 的一个版本,它已经过时了。与上面的示例类似,以下是您如何请求版本 5.0 的权限或范围。

session_start();

$F = new \Facebook\Facebook([
  'app_id'      => 'app-id',
  'app_secret'  => 'app-secret',
  'default_graph_version' => 'v2.8'
 ]);

$helper      = $F->getRedirectLoginHelper();
$callBackUrl = "http://website.com/callBack.php";
$scope       = array("email","user_likes");
$loginUrl    = $helper->getLoginUrl($url,$scope);

另外,我注意到上面的答案是对“user_checkins”的请求,我认为它已被弃用。最新的权限参考列表在这里

于 2016-11-02T02:10:17.433 回答
0

我遇到了同样的问题并得到了以下解决方案。可能对您有帮助:

在 facebook 开发者控制台中打开您的应用程序,然后选择左侧的应用程序评论部分。

提交项目以供批准。某些权限需要在使用前获得 facebook 的批准。

:)

于 2016-10-06T09:16:03.967 回答