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

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

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

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

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

GitHub OAuth используется на платформах для разработчиков, DevTools-сервисах, SaaS-продуктах с технической аудиторией. Один из самых чистых OAuth2-флоу — без сюрпризов с email или именем.

Регистрация OAuth App

  1. github.com → SettingsDeveloper settingsOAuth AppsNew OAuth App
  2. Заполнить: Application name, Homepage URL, Authorization callback URL
  3. Сохранить Client ID и сгенерировать Client Secret

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');
    }
}

Особенности GitHub OAuth

Email может быть приватным. Если пользователь скрыл email в настройках GitHub, getEmail() вернёт null. Запрос с scope user:email позволяет получить email через дополнительный API-запрос:

// Явный запрос emails через API
$emails = Http::withToken($githubUser->token)
    ->get('https://api.github.com/user/emails')
    ->json();

// Найти основной подтверждённый email
$primaryEmail = collect($emails)
    ->firstWhere(fn($e) => $e['primary'] && $e['verified']);

Аватар: URL вида https://avatars.githubusercontent.com/u/{id}?v=4 — стабильный, не истекает.

GitHub username: Полезен для отображения в профиле или для создания ссылки на 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' => 'Вход разрешён только для членов организации']);
}

Сроки

1–2 рабочих дня.