Впровадження Facebook OAuth аутентифікації для веб-сайтів
Facebook OAuth використовується через Facebook Login SDK або стандартний OAuth2-флоу. Аудиторія Facebook у Росії скоротилася, але залишається значимою для міжнародних продуктів і платформ з широкою віковою аудиторією.
Створення додатка у Meta Developer Console
- developers.facebook.com → My Apps → Create App
- Тип додатка: Consumer (для публічного входу)
- Додати продукт Facebook Login → Web
- У налаштуваннях Facebook Login указати Valid OAuth Redirect URIs
- Зберегти App ID і App Secret
У режимі розробки додаток доступен тільки доданим тестовим користувачам. Для публічного доступу потрібно пройти App Review.
Laravel Socialite
// config/services.php
'facebook' => [
'client_id' => env('FACEBOOK_APP_ID'),
'client_secret' => env('FACEBOOK_APP_SECRET'),
'redirect' => env('FACEBOOK_REDIRECT_URI'),
],
class FacebookAuthController extends Controller
{
public function redirect(): RedirectResponse
{
return Socialite::driver('facebook')
->scopes(['email', 'public_profile'])
->redirect();
}
public function callback(): RedirectResponse
{
try {
$fbUser = Socialite::driver('facebook')->user();
} catch (\Exception $e) {
return redirect('/login')->withErrors(['facebook' => 'Помилка авторизації Facebook']);
}
$user = User::updateOrCreate(
['facebook_id' => $fbUser->getId()],
[
'name' => $fbUser->getName(),
'email' => $fbUser->getEmail(),
'email_verified_at' => $fbUser->getEmail() ? now() : null,
'avatar' => $fbUser->getAvatar(),
]
);
Auth::login($user, remember: true);
return redirect()->intended('/dashboard');
}
}
Особливості Facebook
Email може відсутствувати. Якщо користувач зареєстрований по телефону або приховав email від додатків — getEmail() повертає null. Обробити явно:
if (!$fbUser->getEmail()) {
session(['pending_facebook_id' => $fbUser->getId()]);
return redirect('/auth/complete-profile');
}
Аватар: Facebook повертає посилання на аватар, але воно тимчасове. Краще завантажити й зберегти локально при першому вході.
App Review: Для отримання email достатньо стандартного дозволу email. Для додаткових даних (друзі, пости) потрібна App Review у Meta.
Facebook JavaScript SDK
Альтернатива redirect-флоу — кнопка через JS SDK:
<script>
window.fbAsyncInit = function() {
FB.init({ appId: '{{ config("services.facebook.client_id") }}', version: 'v19.0' });
};
</script>
<button onclick="fbLogin()">Увійти через Facebook</button>
Терміни
Стандартний OAuth2-флоу — 1–2 дні. З JS SDK, обробкою відсутнього email та Data Deletion Callback — 3 дні.







