Впровадження GitHub OAuth аутентифікації для веб-сайтів
GitHub OAuth використовується на платформах для розробників, DevTools-сервісах, SaaS-продуктах з технічною аудиторією. Один з найчистіших OAuth2-флоу — без сюрпризів з email або ім'ями.
Реєстрація OAuth App
- github.com → Settings → Developer settings → OAuth Apps → New OAuth App
- Заповнити: Application name, Homepage URL, Authorization callback URL
- Зберегти Client ID і згенерувати Client Secret
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' => 'Помилка авторизації 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-профіль користувача.
Терміни
1–2 дні.







