2015-11-05 46 views
1

我使用Socialite進行Facebook註冊/身份驗證,當用戶接受Facebook上的所有權限時,它的工作效果很好。 但是,當用戶拒絕其中一項權限時,我遇到了問題 - 特別是在我的應用程序中創建帳戶所需的電子郵件。如果用戶做了一個錯誤,並仍想使用Facebook的身份驗證我已經發送到與AUTH_TYPE Facebook的API請求=再請求Laravel 5 Socialite如何發送rerequest(auth_type = rerequest)到Facebook

來自Facebook的文檔:

如果有人拒絕了同意您的應用程序,登錄對話框將不會讓您的應用程序重新請求權限,除非您傳遞auth_type = rerequest以及您的請求。

有什麼辦法可以通過Socialite發送?

+0

偶然的巧合,我現在面臨同樣的問題,我找不到任何方法來發送尚未使用Laravel社會名流一個再請求,比如我決定創建手動另一個類處理這種情況時,我沒有收到來自用戶的電子郵件,我嘗試的另一個解決方法是,當用戶拒絕了電子郵件我手動發送另一個刪除調用圖形Api從用戶設置撤銷應用程序,這將不會登錄用戶在我的應用程序和下一次用戶點擊登錄按鈕時,他會再次提示分享他的電子郵件地址。 –

回答

2

編輯:

我只是找到了解決辦法:

auth_type=rerequest參數添加到redirect(),這樣做你的控制器中創建用戶可以在其中下降許可後重定向的方法,然後設置方法with()到再請求參數附加到URL像這樣:

public function redirect(Socialite $socialite) 
{ 
    return $socialite->driver('facebook')->with(['auth_type' => 'rerequest'])->redirect(); 
} 

作爲Socialite的另一個解決方法暫時不提供ReRequest,因此在這種情況下,您在收到用戶拒絕電子郵件的Socialite用戶響應後,從用戶Facebook帳戶取消授權您的應用權限,然後從登錄頁面提醒用戶他必須授予您使用Facebook繼續登錄到您的應用程序的權限,所以下次用戶單擊登錄按鈕時,他會再次看到一個Facebook對話框,他可以在其中給予所有權限。

/**@var \Laravel\Socialite\Two\User $retrieveUser*/ 
    $retrieveUser = $social->driver($provider)->user(); 
    $client = new \GuzzleHttp\Client; 
    $response = $client->delete("https://graph.facebook.com/{$retrieveUser->id}/permissions", 
     [ 
      'headers' => [ 
       'Accept' => 'application/json', 
      ], 
      'form_params' => [ 
       'access_token' => $retrieveUser->token 
      ] 
     ] 
    ); 

因爲這種解決方法不遵守Facebook的最佳做法,我也建議你使用哪個有這個選項開箱https://github.com/SammyK/LaravelFacebookSdk

+0

它的工作原理!如果需要,您可以在重定向方法中始終在with()中保留['auth_type'=>'rerequest']參數。即使這是用戶第一次登錄,它也可以工作。該參數僅在Facebook請求的權限與先前批准的權限不同時纔會使用。 –

+0

我堅持類似的問題。也許Laravel 5.5的一些解決方案? – 2018-02-05 10:00:29

0

另一個重要方面的另一個包使用Facebook時,不要想當然地認爲用戶將始終有電子郵件註冊Facebook。從Facebook

注:

注意,即使你要求它不能保證 你會得到一個電子郵件地址的電子郵件的權限。例如,如果某人使用電話號碼(而不是電子郵件地址)註冊了 Facebook,則電子郵件地址 可能爲空。

來源:​​

相關問題