重新询问Facebook权限PHP SDK 5.0

时间:2015-07-28 10:52:29

标签: facebook facebook-graph-api facebook-php-sdk

我正在生成登录网址,效果很好,但在我的情况下,电子邮件权限是强制性的,因此我需要向用户解释并重新询问电子邮件权限。

以下是我如何生成网址:

$fb = new Facebook\Facebook([
  'app_id' => fbappid,
  'app_secret' => fbappsecret,
  'default_graph_version' => 'v2.2',
  ]);

$helper = $fb->getRedirectLoginHelper();

$permissions = ['email', 'user_birthday', 'user_location', 'user_hometown', 'user_relationships']; // Optional permissions

$loginUrl = $helper->getLoginUrl('http://localhost/urbanportal/wifilogin.php?origlink='.$_SESSION['origlink'].'&routerlink='.$_SESSION['routerlink'].'&siteid='.$_SESSION['siteid'], $permissions);

我读到您可以传递第三个参数,表明您正在执行重新请求,如下所示:

$loginUrl = $helper->getLoginUrl('http://localhost/urbanportal/wifilogin.php?origlink='.$_SESSION['origlink'].'&routerlink='.$_SESSION['routerlink'].'&siteid='.$_SESSION['siteid'], $permissions, true);

但是我得到了一个"长度的参数app_id必须小于或等于32" Facebook错误,也许是SDK 4.0?

文档似乎总是导航我:

    FB.login(
  function(response) {
    console.log(response);
  },
  {
    scope: 'user_likes',
    auth_type: 'rerequest'
  }
);

但这适用于Javascript SDK ......

1 个答案:

答案 0 :(得分:2)

快速查看SDK的源代码可以发现有一个专用的方法getReRequestUrl

/**
 * Returns the URL to send the user in order to login to Facebook with permission(s) to be re-asked.
 *
 * @param string $redirectUrl The URL Facebook should redirect users to after login.
 * @param array  $scope       List of permissions to request during login.
 * @param string $separator   The separator to use in http_build_query().
 *
 * @return string
 */
public function getReRequestUrl($redirectUrl, array $scope = [], $separator = '&')

https://github.com/facebook/facebook-php-sdk-v4/blob/5.0-dev/src/Facebook/Helpers/FacebookRedirectLoginHelper.php#L202

我希望您知道,不会为每个FB用户提供电子邮件地址; f.i.他们根本不会拥有一个存档的Facebook,所以即使获得email权限,您也不会收到电子邮件地址。