Хочешь, чтобы пользователи могли залогиниться через Facebook или Google и не морочиться с паролями? Socialite вроде как решает эту задачу. Но приготовься: «просто подключил и работает» в Laravel не всегда проходит.
Шаг 1: Установка
composer require laravel/socialite
Требуется Laravel 5.5 и выше. Да, старый проект с 5.4 — забудь.
Шаг 2: Настройка сервисов
В config/services.php добавляем конфиг для нужного провайдера, например Facebook:
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_REDIRECT_URI'),
],
И не забудь переменные в .env. Иначе будет «ничего не работает, но ошибок нет».
Шаг 3: Маршруты и контроллер
В routes/web.php:
Route::get('login/{provider}', 'Auth\LoginController@redirectToProvider');
Route::get('login/{provider}/callback', 'Auth\LoginController@handleProviderCallback');
В LoginController:
use Laravel\Socialite\Facades\Socialite;
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
public function handleProviderCallback($provider)
{
$user = Socialite::driver($provider)->user();
// тут у тебя $user->token, имя, email и куча всего
}
Да, иногда Facebook возвращает не то, что ожидаешь, и приходится ловить ошибки руками.
Шаг 4: Работа с пользователем
После аутентификации у тебя есть объект $user с данными пользователя.
Можно создать или обновить учетку в базе:
$existingUser = User::where('email', $user->getEmail())->first();
if ($existingUser) {
// апдейт токена и логин
} else {
User::create([
'name' => $user->getName(),
'email' => $user->getEmail(),
'provider' => $provider,
'provider_id' => $user->getId(),
]);
}
Небольшой костыль, но Socialite не знает твоей логики.
Шаг 5: Тестирование
Тестируй всё. Facebook, Google и Twitter могут прислать неожиданные значения, редиректы ломаются, токены живут не вечно.
Итог
Socialite — крутая штука, когда нужно «быстро сделать вход через соцсети». Но, как и в любой магии Laravel, придётся ковыряться с мелкими багами, переменными окружения и кейсами вроде «пользователь с таким email уже есть».
0 комментариев