【问题标题】:facebook php sdk - ask for additional permissions laterfacebook php sdk - 稍后请求其他权限
【发布时间】:2015-01-19 05:02:30
【问题描述】:

我正在使用以下代码来检查用户是否已授予在用户墙上发布的权限。我最初不想在登录时获得此权限,因为根据 facebook,这是一种不好的做法,因为用户不知道此权限可能用于什么。因此,当用户单击发布到 facebook 墙时,我想检查用户是否已经授予发布权限,如果没有请求权限。我的代码检查我拥有哪些权限并将其存储在我没有的权限数组列表中,并且用户需要这些权限。

问题:但是当我得到 url 并点击它时,它只是将我重定向到重定向 url 而不是询问权限。

我的代码如下:

<?php
$permsNeeded = array();
$permsNeeded[] = "email";
$permsNeeded[] = "publish_stream";

require_once( 'includes/Facebook/HttpClients/FacebookHttpable.php' );
require_once( 'includes/Facebook/HttpClients/FacebookCurl.php' );
require_once( 'includes/Facebook/HttpClients/FacebookCurlHttpClient.php' );
require_once( 'includes/Facebook/Entities/AccessToken.php' );
require_once( 'includes/Facebook/Entities/SignedRequest.php' );

require_once( 'includes/Facebook/FacebookSession.php' );
require_once( 'includes/Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'includes/Facebook/FacebookRequest.php' );
require_once( 'includes/Facebook/FacebookResponse.php' );
require_once( 'includes/Facebook/FacebookSDKException.php' );
require_once( 'includes/Facebook/FacebookRequestException.php' );
require_once( 'includes/Facebook/FacebookOtherException.php' );
require_once( 'includes/Facebook/FacebookAuthorizationException.php' );
require_once( 'includes/Facebook/GraphObject.php' );
require_once( 'includes/Facebook/GraphSessionInfo.php' );

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;

use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphSessionInfo;

FacebookSession::setDefaultApplication("$appid","$appsecret");
$facebook = new FacebookRedirectLoginHelper("$redirectto");

if(isset($_SESSION['token'])){
    $fbsession = new FacebookSession($_SESSION['token']);
    try{
        $fbsession->Validate($id, $secret);
    }catch(FacebookAuthorizationException $e){
        $fbsession = '';
    }
}

if ( isset( $fbsession ) ) {
    $_SESSION['token'] = $fbsession->getToken();
    $request = new FacebookRequest( $fbsession, 'GET', '/me/permissions' );
    $response = $request->execute();
    $graphObject = $response->getGraphObject();
    $totalproperties = count($graphObject->getPropertyNames());
    $permsArray = array();
    for ($i = 0; $i < $totalproperties; $i++) {
        $permsArray[] = $graphObject->getProperty($i)->GetProperty('permission');
    }
    $permsToPrompt = array();
    for ($i = 0; $i < count($permsNeeded); $i++) {
        if (!in_array($permsNeeded[$i],$permsArray)) {
            $permsToPrompt[] = $permsNeeded[$i];
        }
    }
    if (count($permsToPrompt) > 0) {
        $scopeparams = implode(",",$permsToPrompt);
        $params = array(
            'scope' => $scopeparams
        );
        $helper = new FacebookRedirectLoginHelper($weburl);
        $loginUrl = $helper->getLoginUrl($params);
        echo $loginUrl;
        echo "<a href=\"$loginUrl\">test</a>";
        //header("Refresh:0;URL=$reloadurl");
    }
    else {
        //Post
    }
}

?>

在回显时返回以下网址

https://www.facebook.com/v2.2/dialog/oauth?client_id={app_id_here}&redirect_uri={redirect_url_is_written_here}&state={some_value_here}&sdk=php-sdk-4.0.12&scope=publish_stream

【问题讨论】:

  • 你是从哪里复制代码的? publish_stream 多年来已被弃用,您应该考虑使用自动加载器而不是所有那些无数的需求语句。

标签: php facebook permissions facebook-php-sdk facebook-oauth


【解决方案1】:

您请求权限的方式不正确。您应该将代码更改为:

$params = array( 'email', 'publish_actions' );
$helper = new FacebookRedirectLoginHelper( $weburl );
$loginUrl = $helper->getLoginUrl( $params );

传递给getLoginUrl的参数$params是一个权限数组。不需要像旧的 PHP SDK 那样添加scope

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2014-10-18
    • 2015-07-12
    • 2015-08-23
    • 2012-02-19
    • 2015-02-22
    相关资源
    最近更新 更多