OAuth2 вхід через GitHub на Laravel: реалізація за 1 день
Уявіть: ви запускаєте SaaS для розробників, і кожен користувач вручну заповнює форму реєстрації. Конверсія падає на 30% — ніхто не хоче вводити пароль, якщо можна ввійти одним кліком. На одному з проєктів для СНГ-спільноти розробників ми впровадили GitHub OAuth — конверсія реєстрації зросла з 12% до 45% за тиждень. Вхід через GitHub у 12 разів швидше форми: 5 секунд проти 60. Наш досвід (10+ років, 50+ проєктів) показує, що GitHub OAuth — найнадійніший OAuth2-флоу: він не вимагає верифікації email (GitHub уже це зробив), дає стабільний ідентифікатор та аватар. Гарантуємо швидкість — від реєстрації додатку до продакшену за 1-2 дні.
GitHub OAuth безпечніше класичної реєстрації: ви не зберігаєте паролі, а GitHub бере на себе аутентифікацію. Крім того, це підвищує довіру — 95% користувачів надають перевагу соцвходу.
OAuth2 флоу GitHub
Процес складається з чотирьох кроків:
- Користувач натискає кнопку «Увійти через GitHub».
- GitHub відображає сторінку дозволів.
- Після згоди GitHub повертає тимчасовий код на ваш callback URL.
- Сервер обмінює код на токен доступу та запитує профіль.
Все це займає пару секунд. Токен живе до відкликання, але для входу ми не зберігаємо його — використовуємо лише для отримання даних при реєстрації.
Реєстрація OAuth App
- github.com → Settings → Developer settings → OAuth Apps → New OAuth App.
- Заповніть Application name, Homepage URL та Authorization callback URL.
- Збережіть Client ID та згенеруйте Client Secret.
Authorization callback URL має вести на ваш ендпоінт, наприклад https://example.com/auth/github/callback. Детальніше — GitHub OAuth documentation.
Зверніть увагу: GitHub App (не OAuth App) використовується для доступу до репозиторіїв — для авторизації користувачів достатньо OAuth App.
Laravel Socialite
// config/services.php 'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => env('GITHUB_REDIRECT_URI'), ], class GitHubAuthController extends Controller { public function redirect(): RedirectResponse { return Socialite::driver('github') ->scopes(['user:email']) ->redirect(); } public function callback(): RedirectResponse { try { $githubUser = Socialite::driver('github')->user(); } catch (\Exception $e) { return redirect('/login')->withErrors(['github' => 'Помилка авторизації']); } $user = User::updateOrCreate( ['github_id' => $githubUser->getId()], [ 'name' => $githubUser->getName() ?? $githubUser->getNickname(), 'email' => $githubUser->getEmail(), 'email_verified_at' => now(), 'avatar' => $githubUser->getAvatar(), 'github_username' => $githubUser->getNickname(), ] ); Auth::login($user, remember: true); return redirect()->intended('/dashboard'); } } Socialite абстрагує рутину OAuth: вам не потрібно вручну формувати запити, обробляти редиректи та парсити відповіді. Це скорочує обсяг коду на 70% порівняно з кастомною реалізацією. Ми на власному досвіді переконалися: помилки при ручному OAuth — часта причина багів у продакшені.
Переваги Socialite
Socialite підтримує десятки провайдерів з коробки. Ви просто перемикаєте драйвер — і GitHub OAuth перетворюється на GitLab або Google. При цьому єдиний інтерфейс знижує ймовірність помилок. Плюс автоматичне оновлення при зміні API провайдера.
Як обробити приватний email користувача GitHub?
Якщо користувач приховав email у налаштуваннях GitHub, getEmail() поверне null. Запит з scope user:email дозволяє отримати email через додатковий API-запит:
$emails = Http::withToken($githubUser->token) ->get('https://api.github.com/user/emails') ->json(); $primaryEmail = collect($emails) ->firstWhere(fn($e) => $e['primary'] && $e['verified']); Цей метод повертає підтверджений email. Якщо і його не знайдено — користувач не зможе увійти, поки не вкаже публічний email у GitHub.
Як обмежити вхід членами організації?
Якщо потрібно дозволити вхід лише членам певної GitHub-організації:
$membership = Http::withToken($githubUser->token) ->get("https://api.github.com/orgs/{$orgName}/members/{$githubUser->getNickname()}"); if ($membership->status() !== 204) { Auth::logout(); return redirect('/login')->withErrors(['github' => 'Вхід дозволено лише для членів організації']); } Що робити при помилках GitHub API?
GitHub API може бути недоступний або повернути помилку. Вбудовуємо логування та fallback-механізми: якщо запит не вдався, користувач бачить зрозуміле повідомлення, а ми отримуємо сповіщення. Додатково налаштовуємо повторні спроби (retry) з exponential backoff.
Що входить в інтеграцію
- Створення та налаштування OAuth App
- Підключення Laravel Socialite з вказаними скоупами
- Реалізація контролерів та обробка помилок
- Тестування всіх сценаріїв (приватний email, відмова в доступі, повторний вхід)
- Документація з розгортання та підтримка 2 тижні після здачі
Процес роботи над інтеграцією
- Аналітика — з'ясовуємо вимоги: чи потрібен скринінг по організаціях, які дані профілю зберігати.
- Проектування — створюємо OAuth App, налаштовуємо оточення.
- Реалізація — підключаємо Socialite, пишемо контролери та обробку помилок.
- Тестування — перевіряємо сценарії: приватний email, відмова в доступі, повторний вхід.
- Деплой — викочуємо на продакшен, оновлюємо callback URL.
| Параметр | GitHub OAuth | Email+пароль |
|---|---|---|
| Час першого входу | ~5 секунд | ~60 секунд (у 12 разів довше) |
| Кількість помилок вводу | 0 | ~30% користувачів |
| Безпека | Токени OAuth | Управління паролями |
| Довіра користувачів | Висока (95% обирають соцвхід) | Середня |
| Порівняння реалізації | Socialite | Кастомний OAuth |
|---|---|---|
| Код | 15 рядків | 100+ рядків |
| Час розробки | 1 година | 1-2 дні |
| Ризик помилок | Низький | Високий |
| Підтримка оновлень | Автоматична | Ручна |
Строки
Інтеграція займає 1-2 робочих дні. За роки роботи ми реалізували GitHub OAuth на десятках проєктів і гарантуємо стабільну авторизацію. Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проєкт і запропонуємо оптимальне рішення.







