2017-01-05 4 views
1

Я использую логин с facebook в моем проекте laravel 5.3. Кажется, я работаю, когда получаю все данные, записанные в базу данных у пользователя facebook, но мой проект видит, что мое состояние auth не зарегистрировано. Также он не перенаправляет меня на панель управления, а отображает белую страницу с ссылкой обратного вызова. Зачем?laravel 5.3 логин с facebook

перенаправляет пользователя на страницу fagebook войти

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

Обработчик обратного вызова

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

    $user = User::where('facebook_id', $socialUser->getId())->first(); 
    if(!$user){ 
     User::create([ 
      'facebook_id' => $socialUser->getId(), 
      'name' => $socialUser->getName(), 
      'email' => $socialUser->getEmail(), 
     ]); 

     auth()->login($user); 
     return redirect()->to('/dashboard'); 
    } 
} 

Мой AUTH() -> Логин, похоже, не на работу, а также перенаправление. В чем может быть проблема? Спасибо!

маршруты:

Route::get('dashboard', ['as' => 'dashboard', 'uses' => '[email protected]']); 

Route::get('auth/facebook', 'Auth\[email protected]'); 
Route::get('auth/facebook/callback', 'Auth\[email protected]'); 
+0

у меня есть идея, что проблема есть, вы можете подтвердить, если Пользователь :: create фактически создает пользователя в базе данных? –

+0

да! и мой proj перенаправляет на логин facebook, я вхожу в систему, а затем меня перенаправляют на мой проект/auth/facebook/callback/token –

+0

. Я поставил ответ ниже, ваш текущий код ничего не делает, если пользователь существует @Andrew T –

ответ

2

поведение кажется правильным для того, как вы закодировали обработчик обратного вызова. Я считаю, что вы хотите, чтобы пользователь существовал, а затем вы хотите их зарегистрировать, ваш текущий код ничего не имеет, если пользователь существует, поэтому вам нужно убедиться, что пользователь существует, что они вошли в систему.

I изменит код следующим образом:

$user = User::where('facebook_id', $socialUser->getId())->first(); 

if(!$user){ 
    User::create([ 
     'facebook_id' => $socialUser->getId(), 
     'name' => $socialUser->getName(), 
     'email' => $socialUser->getEmail(), 
    ]);  
} 

if(Auth::loginUsingId($user->id)){ 
    return redirect()->intended('/dashboard'); 
} 

Таким образом, если есть пользователь, они будут по-прежнему регистрируются в вместо обработчика ничего не делая

+0

не думал об этом: D Я попробую сейчас –

+0

большое спасибо! Это сработало! –

+0

без проблем рад помочь –

Смежные вопросы