2015-07-16 4 views
1

У меня есть несколько вопросов, на которые я не могу ответить Laravel official doc .. Я пытаюсь использовать этот практический логин Facebook (или другой SNS), который мы видим повсюду.Laravel 5 Социальная аутентификация (Facebook)

Я искал хороший учебник об этом, но я не мог найти лучшего, чем that one.

Я следовал за ним, и я думаю, что я в значительной степени понимаю процесс, связанный здесь.

  • Наш сайт переходит на FB
  • Мы аутентифицировать себя на FB
  • Затем попадаю обратно в наше приложение. С сохраненным «токеном» и данными пользователя.

Но что тогда? Как мы получаем доступ к защищенной части нашего веб-сайта? Я имею в виду, как мы передаем промежуточное программное обеспечение из коробки, которое у нас уже есть?

Поскольку у меня есть кнопка входа в FB на стандартной странице входа в систему (www.mywebsite/auth/login), но тогда я не совсем понимаю, что такое обратный вызов в моем service.php, если у меня есть?

В настоящее время

'facebook' => [ 
    'client_id' => '12321452415', 
    'client_secret' => '675f2d7f77232b0fb20762261db6dcd072', 
    'redirect' => 'http://mywebsite/', 
], 

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

Надежда Я достаточно ясно ..

Любая помощь очень высоко ценится

ответ

0

Хорошо, я уверен, что я могу сделать гораздо лучше, чем это, но у меня есть что-то работает (после того, как чесать голову пару раз)

Мои маршруты:

Route::get('connect/{provider}', '[email protected]'); 
Route::get('account/{provider}', '[email protected]'); 

И мой контроллер:

class AccountController extends Controller { 

public function redirectToProvider($provider) { 
    return Socialize::with($provider)->redirect(); 
} 

public function handleProviderCallback($provider) { 
    $user = Socialize::with($provider)->user(); 

    // Define the SNS variable 
    $id  = $user->getId(); 
    $name = $user->getName(); 
    $email = $user->getEmail(); 
    $avatar = $user->getAvatar(); 

    // check if the user exists in the DB already 
    $users = DB::table('users')->where($provider.'_id', $id)->first(); 

    // if the user doesn't exist insert a new record and get the user_id 
    if(empty($users)){ 
     DB::table('users')->insert(
      ['name' => $name,'email' => $email,'profile_picture' => $avatar,$provider.'_id' => $id] 
     ); 
     $users = DB::table('users')->where($provider.'_id', $id)->first(); 
    } 

    // use the auth facade to login with the user ID 
    Auth::loginUsingId($users->id); 
    { 
     // redirect to the home page 
     return redirect()->to('/'); 
    } 
} 
} 

И моя страница Логин:

<a href="{!!URL::to('connect/facebook')!!}">Login with Facebook</a><br> 
<a href="{!!URL::to('connect/twitter')!!}">Login with Twitter</a><br> 
<a href="{!!URL::to('connect/google')!!}">Login with Google</a> 

Любые улучшения приветствуются. Я знаю, что это не идеально, но это может помочь кому-то :)

1

Перенаправление вы определили под services.php должен быть маршрут вашего сайта позволяет говорить http://website.com/callback; как только вы подтвердите свой запрос на facebook, вы будете перенаправлены обратно на этот маршрут. Если вы работаете с базовым приложением facebook без каких-либо дополнительных разрешений, вы получите имя пользователя Facebook, идентификатор профиля fb, фотографию и несколько дополнительных сведений, упомянутых в упомянутом руководстве. Вы можете использовать эти данные для аутентификации пользователя на своем веб-сайте, например, у вас есть пользователи таблицы с одним дополнительным столбцом i.e fb_id, как только вы получите ответ от facebook, который вы проверяете на свой db, если fb_id, полученный из ответа, существует в базе данных? если да, то использовать

Auth::loginUsingId($fetched->id); 
{ 
    return redirect()->to('some-route'); 
} 

, если вы не получите никакого соответствия записи этого fb_id вы вставили новую запись в базе данных, а затем loginUsingId

Я надеюсь, что я достаточно ясно с этим.

+0

Думаю, я понимаю, я попробую и обновить ответ позже :) - Спасибо – Valentincognito