2014-09-24 60 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' 
       ]));