ichinya / laravel-socialite
Socialite for Laravel
Fund package maintenance!
Ichinya
www.tinkoff.ru/cf/VApzsOepH2
donate.stream/ichi
www.donationalerts.com/r/ichi_nya
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
pkg:composer/ichinya/laravel-socialite
Requires
- php: ^8.2
- laravel/framework: ^11.0
- laravel/socialite: *
README
Пакет добавляет готовый OAuth-вход в Laravel через laravel/socialite:
- маршруты
/socialite/{driver}/redirectи/socialite/{driver}/callback; - таблицу
social_accountsдля привязки провайдера к пользователю; - автоматическую авторизацию существующего пользователя или создание нового;
- привязку дополнительного провайдера для уже авторизованного пользователя.
Требования
- PHP:
^8.3|8.4|8.5 - Laravel:
^12 laravel/socialite
Установка
composer require ichinya/laravel-socialite
Опубликуйте конфиг (опционально, но обычно нужно):
php artisan vendor:publish --tag=ichinya-socialite
Выполните миграции:
php artisan migrate
Что происходит при логине
- Гость нажимает вход через провайдер (
socialite.redirect). - На callback пакет:
- ищет запись в
social_accountsпоdriver + identity; - если находит, авторизует связанного пользователя;
- если не находит, создает пользователя и привязывает аккаунт.
- ищет запись в
- Если пользователь уже авторизован, callback только привязывает новый провайдер к текущему пользователю.
Шаг 1. Настройте config/socialite.php
<?php return [ 'drivers' => [ 'github' => '/assets/socialite/github.svg', 'google' => '/assets/socialite/google.svg', 'telegram' => '/assets/socialite/telegram.svg', ], 'stateless_drivers' => [ 'telegram' => true, ], 'redirects' => [ 'after_login' => '/cabinet', 'after_bind' => '/cabinet', 'on_error' => 'route:login', ], ];
Пояснение по ключам
drivers- список активных провайдеров (driver => путь_к_иконке).stateless_drivers- драйверы, для которых нужно->stateless()(частоtelegram).redirects.after_login- куда отправлять после входа.redirects.after_bind- куда отправлять после привязки провайдера.redirects.on_error- куда отправлять при ошибке OAuth.
Поддерживает:- URL/путь (
/login); route:имя_маршрута(напримерroute:login).
- URL/путь (
Шаг 2. Настройте config/services.php и .env
Пример для Google/GitHub
config/services.php:
'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_REDIRECT_URI'), ], 'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => env('GITHUB_REDIRECT_URI'), ],
.env:
GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GOOGLE_REDIRECT_URI="${APP_URL}/socialite/google/callback" GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GITHUB_REDIRECT_URI="${APP_URL}/socialite/github/callback"
Пример для Telegram
Для Telegram нужен провайдер socialiteproviders/telegram.
composer require socialiteproviders/telegram
config/services.php:
'telegram' => [ 'bot' => env('TELEGRAM_LOGIN_BOT_NAME', env('TELEGRAM_BOT_NAME')), 'client_id' => null, 'client_secret' => env('TELEGRAM_BOT_TOKEN'), 'redirect' => env('TELEGRAM_LOGIN_REDIRECT_URI', env('APP_URL').'/socialite/telegram/callback'), ],
.env:
TELEGRAM_LOGIN_BOT_NAME=your_bot_name TELEGRAM_BOT_TOKEN=your_bot_token TELEGRAM_LOGIN_REDIRECT_URI="${APP_URL}/socialite/telegram/callback"
Регистрация драйвера Telegram (например в App\Providers\AppServiceProvider::boot()):
use Illuminate\Support\Facades\Event; use SocialiteProviders\Manager\SocialiteWasCalled; use SocialiteProviders\Telegram\Provider as TelegramProvider; Event::listen(function (SocialiteWasCalled $event): void { $event->extendSocialite('telegram', TelegramProvider::class); });
Шаг 3. Добавьте связь в модель User
Пакет работает с App\Models\User, поэтому обычно достаточно добавить trait:
use Ichinya\LaravelSocialite\Traits\HasSocialites; class User extends Authenticatable { use HasSocialites; }
После этого у пользователя будет связь:
$user->socials; // коллекция SocialAccount
Шаг 4. Добавьте кнопки входа
<a href="{{ route('socialite.redirect', ['driver' => 'github']) }}"> Войти через GitHub </a> <a href="{{ route('socialite.redirect', ['driver' => 'google']) }}"> Войти через Google </a> <a href="{{ route('socialite.redirect', ['driver' => 'telegram']) }}"> Войти через Telegram </a>
Маршруты, которые добавляет пакет
GET /socialite/{driver}/redirect(socialite.redirect)GET /socialite/{driver}/callback(socialite.callback)
Обработка ошибок на форме логина
При ошибке OAuth пакет делает редирект на socialite.redirects.on_error и кладет текст ошибки в ключ socialite.
@if($errors->has('socialite')) <div>{{ $errors->first('socialite') }}</div> @endif
Частые проблемы
Invalid state
Добавьте драйвер в stateless_drivers:
'stateless_drivers' => [ 'telegram' => true, ],
Bot username required
Проверьте services.telegram.bot и переменную TELEGRAM_LOGIN_BOT_NAME.
Mixed Content (http в https приложении)
Проверьте:
APP_URL=https://...- доверие к proxy-заголовкам (
X-Forwarded-Proto) в Laravel/веб-сервере.
Журнал изменений
Смотрите CHANGELOG.
Contributing
Смотрите CONTRIBUTING.
Credits
License
The MIT License (MIT). See LICENSE.md.