2014-09-24 84 views
5

我们正在开发一个使用PHP SDK 3.2.3和Javascript SDK的Facebook应用程序。如果他们拒绝登录Facebook上发布的内容,我需要重新要求用户在他们的墙上发布内容。重新要求拒绝的Facebook权限(auth_type = rerequest)不起作用

由于documentation说:

[...]您的应用程序必须重新要求进行特殊处理拒绝的权限。 [...]

Web应用程序必须显式地向Login对话框传递一个新选项:auth_type:rerequest。关于新选项如何在Web上工作的详细信息在我们有关在Web上使用JavaScript SDK的文档中进行了介绍。

,但我们尝试了这个请求:

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

但用户直接重定向的URL MY_PAGE和权限不重新请求。

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

+0

什么是Facebook的链接?或者URL是否包含实际的代码? – Coffee 2014-09-24 15:02:03

+2

这是我们用于重定向用户的网址。我们预计,随着auth_type = rerequest,Facebook再次请求权限,但没有发生。 – sensorario 2014-09-24 15:08:56

+0

在文档中您发现应该在url中添加'auth_type = rereqeust'? – WizKid 2014-09-24 16:37:55

回答

3

在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'部分,他们将被再次请求权限。

-1

在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', 
)); 
0

假设用户拒绝电子邮件的权限,与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' 
       ]));