【问题标题】:Facebook PHP SDK: Check if a user has granted a certain set of permissionsFacebook PHP SDK:检查用户是否授予了一组权限
【发布时间】:2015-10-29 00:41:12
【问题描述】:

我想检查一个用户是否授权了以下权限; 'manage_pages'、'publish_pages'、'read_insights',适用于我的应用。简而言之,如果他们拒绝一项或多项权限,我需要知道,因为所有权限都是必需的。

这是我获得用户访问令牌后的回调方法。如何验证他们批准了所有权限请求?

注意:我使用的是 SammyK Laravel Facebook SDK 包。

public function handleFacebookCallback()
    {
        try {
            $token = Facebook::getAccessTokenFromRedirect();

            $user = Facebook::get('/me?fields=permissions', $token)->getGraphUser();
            $permissions = $user['permissions']->asArray();

            // permissions: 'manage_pages', 'publish_pages', 'read_insights'

            if (array_key_exists('publish_pages', $permissions['data'][0]))
            {
                // permissions exist, proceed
            }
            else 
            {
                // user denied permission(s), redirect
            }
        }
        ....

【问题讨论】:

    标签: php facebook laravel-5 facebook-php-sdk


    【解决方案1】:

    根据Facebook Graph API,您可以调用user/permissions获取用户授予应用程序的所有权限。

    $request = new FacebookRequest(
      $session,
      'GET',
      '/me/permissions'
    );
    
    $response = $request->execute();
    $graphObject = $response->getGraphObject();
    /* handle the result */
    
    foreach($graphObject as $permission) {
            if($permission->permission == 'publish_pages' AND $permission->status == 'granted') {
                // User has granted publish_pages permission
        }
    }
    

    你可以调试这个调用here,我没有测试过,但它应该可以工作。

    【讨论】:

      【解决方案2】:

      不确定这是否是最巧妙的答案或其他人会如何解决这个问题,但这是我想出的......

      try {
          $token = Facebook::getAccessTokenFromRedirect();
      
          $request = Facebook::get('/me?fields=permissions', $token);
          $user = $request->getGraphUser();
          $permissions = $user['permissions'];
      
          // if user denied ANY of the required permissions
          foreach ($permissions as $p => $permission) 
          {
              if ($permission['status'] !== 'granted')
              {
                  return redirect()->route('connect.index')->withErrors('Error: We require all permissions in order to connect your Facebook page.');
              }
          }
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-13
        • 1970-01-01
        相关资源
        最近更新 更多