2014-01-06 68 views
0

我現在需要幫助我無法使用Facebook登錄讓我們來看看我的代碼。Laravel 4 jenssegers-mongodb - 我如何使用facebook實現身份驗證

$code = Input::get('code'); 
if (strlen($code) == 0) 
    return Redirect::to('/')->with('message', 'There was an error communicating with Facebook'); 

$facebook = new Facebook(Config::get('facebook')); 
$uid = $facebook->getUser(); 

if ($uid == 0) 
    return Redirect::to('/')->with('message', 'There was an error'); 

$me = $facebook->api('/me'); 

$existing_user = User::whereFBid($uid); 

if (empty($existing_user)) 
{ 
    $user['name'] = $me['first_name'].' '.$me['last_name']; 
    $user['email'] = $me['email']; 
    $user['photo'] = 'https://graph.facebook.com/'.$me['username'].'/picture?type=large'; 

    $user['fbid'] = $uid; 
    $user['username'] = $me['username']; 
    $user['access_token'] = $facebook->getAccessToken(); 

    $rsUser = User::registerUser($user); 
} 
else 
{ 
    $user = new User(); 
    $user->fbid = $uid; 
    Auth::login($user); 
} 

return Redirect::to('/')->with('message', 'Logged in with Facebook'); 

我的路由文件

Route::get('/', function() 
{ 
    $data = array(); 

    if (Auth::check()) 
    { 
     $data = Auth::user(); 
     var_dump($data);exit; 
    } 
    else 
    { 
     echo 'auth check failed';exit; 
    } 

    return View::make('hello', array('data'=>$data)); 
}); 

我已經添加的用戶模型使用Jenssegers \ MongoDB的\型號雄辯

驗證::登錄($用戶),它的通,但是當我的代碼重定向到'/'和Auth :: check()這不是工作會去其他條件。我該如何解決這個問題,任何人都可以幫忙?非常感謝,對不起我的英文。

回答

0

在您的其他聲明中,您重新實例化用戶,但這對我沒有意義。在您的if語句之前,您正在嘗試查找用戶。然後有你的if語句,當用戶不存在時。然後有你的其他陳述,當用戶確實存在時。所以,你不必創建一個新的用戶模式:

else 
{ 
    $user = new User(); 
    $user->fbid = $uid; 
    Auth::login($user); 
} 

但是你必須使用$ existing_user變量登錄

else 
{ 
    Auth::login($existing_user); 
} 
+0

方法whereFBid在我的模型是 公共靜態功能whereFBid。 ($ fbid) { $ rsUser = DB :: collection('users') - > where('fbid',$ fbid) - > first(); return $ rsUser; } ,我做我的控制器從你的建議,但它的錯誤: 參數1傳遞給照亮\身份驗證\衛隊::登錄()必須實現接口照亮\身份驗證\的UserInterface,數組給定 –

+0

這是爲什麼?好的,忽略這個靜態方法。請閱讀:http://laravel.com/docs/eloquent#query-scopes或更改「$ existing_user = User :: whereFBid($ uid);」到「$ existing_user = User :: where('fbid','=',$ uid) - > first();」然後再試一次。在模型中使用靜態方法可能不是(也不會是)要走的路。 – Jaco