重新请求拒绝的Facebook权限(auth_type=rerequest)无效


Re-asking for Declined Facebook Permissions (auth_type=rerequest) does not work

我们正在使用PHP SDK 3.2.3和Javascript SDK开发Facebook应用程序。如果用户在登录时拒绝在Facebook上发布,我需要重新请求他们在墙上发布的权限。

正如文件所说:

[…]您的应用程序必须通过特殊处理重新请求拒绝的权限。[…]

[…]Web应用程序必须向登录对话框显式传递一个新选项:auth_type:rerequest。关于新选项如何在网络上工作的详细信息,请参阅我们关于在网络上使用JavaScriptSDK的文档。

但我们尝试了这个请求:

https://www.facebook.com/dialog/oauth?auth_type=rerequest&client_id=1…7&redirect_uri=MY_PAGE&state=a1f4412db0617ef1a620ac1d1ebc2af8&sdk=php-sdk-3.2.3&campaign_page_with_active_panel=MY_page

但是用户直接在MY_PAGE url上重定向,并且不重新请求权限。

这种(错误的)行为可能是由于应用程序是测试应用程序?

在js-sdk上,我直接调用如下登录方法:

FB.login( function( response ) {
      if (response.status == 'connected') {
      }
},{
      scope: 'email,public_profile',
      return_scopes: true,
      auth_type: 'rerequest'
 });

在服务器端,我使用accesstoken来请求Facebook上的用户详细信息。如果没有提供电子邮件,我会返回一个错误,告诉用户他需要再次登录并提供电子邮件。当他们因为auth_type:'rerequest'部分再次单击登录按钮时,他们将再次被请求权限。

假设用户拒绝了电子邮件权限,使用FacebookSDK和laravel,其中$fb是FacebookSDK的实例,您可以:

return redirect()->to($fb->getReRequestUrl(['email']));

没有FacebookSDK:

return redirect('https://www.facebook.com/v2.10/dialog/oauth?' . build_query([
                    'client_id'     => config('services.facebook.client_id'),
                    'redirect_uri'  => 'http://localhost:8000/social_auth/facebook/callback',
                    'state'         => $state,
                    'auth_type'     => 'rerequest',
                    'scope'         => 'email'
                ]));

在php SDK(3.x)中,auth_type请求可以通过getLoginUrl参数发送到Facebook:

$loginUrl = $facebook->getLoginUrl(array(
    'scope' => 'public_profile, user_friends, email',
    'redirect_url' => 'http://www.yourul.com/example.php',
    'auth_type' => 'rerequest',
));