Реализация авторизации через Facebook на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация авторизации через Facebook на сайте
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Реализация авторизации через Facebook на сайте

Facebook OAuth используется через Facebook Login SDK или стандартный OAuth2-флоу. Аудитория Facebook в России сократилась, но остаётся значимой для международных продуктов и платформ с широкой возрастной аудиторией.

Создание приложения в Meta Developer Console

  1. developers.facebook.com → My AppsCreate App
  2. Тип приложения: Consumer (для публичного входа)
  3. Добавить продукт Facebook LoginWeb
  4. В настройках Facebook Login указать Valid OAuth Redirect URIs
  5. Зафиксировать 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' => 'Ошибка авторизации']);
        }

        $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()) {
    // Предложить ввести email вручную после входа
    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>
<script async defer src="https://connect.facebook.net/ru_RU/sdk.js"></script>

<button onclick="fbLogin()">Войти через Facebook</button>
<script>
function fbLogin() {
    FB.login(function(response) {
        if (response.authResponse) {
            fetch('/auth/facebook/token', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrfToken },
                body: JSON.stringify({ access_token: response.authResponse.accessToken }),
            }).then(r => r.json()).then(data => {
                window.location.href = data.redirect;
            });
        }
    }, { scope: 'email,public_profile' });
}
</script>
// Верификация access_token через Graph API
public function handleToken(Request $request): JsonResponse
{
    $response = Http::get('https://graph.facebook.com/me', [
        'access_token' => $request->access_token,
        'fields'       => 'id,name,email,picture',
    ]);

    if ($response->failed()) {
        return response()->json(['error' => 'Invalid token'], 401);
    }

    $fbData = $response->json();
    $user = User::updateOrCreate(
        ['facebook_id' => $fbData['id']],
        ['name' => $fbData['name'], 'email' => $fbData['email'] ?? null]
    );

    Auth::login($user);
    return response()->json(['redirect' => '/dashboard']);
}

Деактивация и удаление данных

Meta требует реализации Data Deletion Callback — endpoint, на который Facebook отправляет запрос при удалении пользователем данных приложения:

Route::post('/auth/facebook/data-deletion', function (Request $request) {
    // Подтвердить подпись запроса через HMAC-SHA256
    // Удалить или анонимизировать данные пользователя
    return response()->json([
        'url'         => 'https://example.com/deletion-status?id=' . $confirmationCode,
        'confirmation_code' => $confirmationCode,
    ]);
});

Сроки

Стандартный OAuth2-флоу — 1–2 рабочих дня. С JS SDK, обработкой отсутствующего email и Data Deletion Callback — 3 дня.