2016-03-09 81 views
0

我在我的網站中實現了Facebook登錄功能。我正在使用Laravel 5.1社交名稱。我遇到了幾個問題。在最好的情況下,一切都像魅力一樣,但是,現在我不處理如果用戶點擊Facebook登錄按鈕時會發生什麼,但是當被要求給予我的應用權限時,他/她點擊取消。我不處理如果有人通過應用程序設置從Facebook中刪除我的應用程序,並重新訪問我的應用程序會發生什麼情況。我的應用程序應該檢測到這一點,並提示該用戶重新登錄,如果有人通過應用程序設置禁用Facebook平臺並登錄到我的應用程序,會發生什麼情況。最後但並非最不重要的是,如果我的應用令牌過期並且有人嘗試登錄,會發生什麼情況?使用Laravel 5.1測試Facebook登錄流程

路線

Route::get('/signup/facebook/',[ 
    'uses' => '[email protected]', 
    'as' => 'auth.getSocialAuth' 
]); 


Route::get('/signup/facebook/callback/',[ 
    'uses' => '[email protected]', 
    'as' => 'auth.getSocialAuthCallback' 
]); 

FacebookCotroller

<?php namespace Podobri\Http\Controllers; 

use Podobri\Models\User; 
use Auth; 
use Socialite; 

class FacebookController extends Controller { 



    public function getSocialAuth(){ 
     return Socialite::driver('facebook')->redirect(); 
    } 

    public function getSocialAuthCallback() 
    { 
     try { 
      $user = Socialite::driver('facebook')->user(); 
     } catch (Exception $e) { 
      return redirect('signup/facebook'); 
     } 

     $authUser = $this->findOrCreateUser($user); 

     Auth::login($authUser, true); 

     return redirect()->route('problems.index'); 
    } 


    private function findOrCreateUser($facebookUser) { 
     $authUser = User::where('facebook_id', $facebookUser->id)->where('email', '!=', $facebookUser->user['email'])->first(); 

     if ($authUser) { 
      return $authUser; 
     } 

     return User::create([ 
        'first_name' => $facebookUser->user['first_name'], 
        'last_name' => $facebookUser->user['last_name'], 
        'email' => $facebookUser->user['email'], 
        'facebook_id' => $facebookUser->id, 
     ]); 
    } 

} 

Facebook登錄按鈕的代碼

<a class="fb-log" href="{{ route('auth.getSocialAuth') }}">Facebook</a> 

我非常期待指導方針。

+1

https://developers.facebook.com/docs/facebook-login/handling-declined-permissions,HTTPS: //developers.facebook.com/docs/facebook-login/access-tokens/debugging-and-error-handling – CBroe

回答

1

我有取消訪問同樣的問題,但我解決

當有人取消對Facebook的登錄訪問

會重定向頁面

http://YourDomainName.com.tw/login/callback/facebook?error=access_denied&error_code=200&error_description=Permissions+error ....

所以,我添加一條IF語句來檢查

if($request->error=='access_denied'){ 
     return redirect('/'); 
    } 

也許ü可以試試這個

public function getSocialAuthCallback(Request $request) 
{ 
    if($request->error=='access_denied'){ 
     return redirect('/'); 
    } 
    try { 
     $user = Socialite::driver('facebook')->user(); 
    } catch (Exception $e) { 
     return redirect('signup/facebook'); 
    } 

    $authUser = $this->findOrCreateUser($user); 

    Auth::login($authUser, true); 

    return redirect()->route('problems.index'); 
} 

,不要忘了這

use Illuminate\Http\Request;