Версія фреймворка: 8.x

Laravel Socialite

Introduction

In addition to typical, form based authentication, Laravel also provides a simple, convenient way to authenticate with OAuth providers using Laravel Socialite. На даний момент Socialite підтримує автентифікацію за допомогою Facebook, Twitter, LinkedIn, Google, GitHub, GitLab та Bitbucket.

Адаптери для інших платформ перераховані спільнотоюПостачальники соціальних мережвеб-сайт.

Оновлення Socialite

Під час оновлення до нової основної версії Socialite важливо уважно переглянутипосібник з оновлення.

Встановлення

Щоб розпочати роботу з Socialite, використовуйте Composer, щоб додати пакет до залежностей вашого проекту:

composer require laravel/socialite

Конфігурація

Перш ніж використовувати Socialite, вам також потрібно буде додати облікові дані служб OAuth, якими користується ваша програма. Ці облікові дані слід розмістити у вашомуconfig/services.phpфайл конфігурації, і повинен використовувати ключfacebook,twitter,linkedin,google,github,gitlabабоbitbucketзалежно від постачальників, яких вимагає ваша програма. Наприклад:

'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),
    'client_secret' => env('GITHUB_CLIENT_SECRET'),
    'redirect' => 'http://your-callback-url',
],
ЯкщоredirectПараметр містить відносний шлях, він буде автоматично перетворений на повністю кваліфіковану URL-адресу.

Routing

Далі ви готові до автентифікації користувачів! Вам знадобляться два маршрути: один для перенаправлення користувача до постачальника OAuth, а інший для отримання зворотного дзвінка від постачальника після автентифікації. Ми отримаємо доступ до Socialite за допомогоюSocialiteфасад:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;

class LoginController extends Controller
{
    /**
     * Redirect the user to the GitHub authentication page.
     *
     * @return \Illuminate\Http\Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    /**
     * Obtain the user information from GitHub.
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('github')->user();

        // $user->token;
    }
}

redirectметод дбає про відправлення користувача до постачальника OAuth, тоді якuserметод прочитає вхідний запит і отримає інформацію про користувача від постачальника.

Вам потрібно буде визначити маршрути до методів вашого контролера:

use App\Http\Controllers\Auth\LoginController;

Route::get('login/github', [LoginController::class, 'redirectToProvider']);
Route::get('login/github/callback', [LoginController::class, 'handleProviderCallback']);

Необов’язкові параметри

Ряд постачальників OAuth підтримують необов’язкові параметри у запиті на перенаправлення. Щоб включити будь-які необов’язкові параметри у запит, зателефонуйте наwithметод з асоціативним масивом:

return Socialite::driver('google')
    ->with(['hd' => 'example.com'])
    ->redirect();
При використанніwith, будьте обережні, щоб не передавати зарезервовані ключові слова, такі якstateабоresponse_type.

Області доступу

Перш ніж перенаправляти користувача, ви можете також додати додаткові "області" на запит, використовуючиscopesметод. Цей метод об’єднає всі існуючі області з тими, які ви надаєте:

return Socialite::driver('github')
    ->scopes(['read:user', 'public_repo'])
    ->redirect();

Ви можете переписати всі існуючі області, використовуючиsetScopesметод:

return Socialite::driver('github')
    ->setScopes(['read:user', 'public_repo'])
    ->redirect();

Аутентифікація без Stateless

statelessметод може бути використаний для вимкнення перевірки стану сеансу. Це корисно при додаванні соціальної автентифікації до API:

return Socialite::driver('google')->stateless()->user();
Аутентифікація без Stateless недоступна для драйвера Twitter, який використовує OAuth 1.0 для автентифікації.

Отримання даних користувача

Отримавши примірник користувача, ви можете отримати ще кілька деталей про користувача:

$user = Socialite::driver('github')->user();

// OAuth Two Providers
$token = $user->token;
$refreshToken = $user->refreshToken; // not always provided
$expiresIn = $user->expiresIn;

// OAuth One Providers
$token = $user->token;
$tokenSecret = $user->tokenSecret;

// All Providers
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();

Отримання даних користувача з маркера (OAuth2)

Якщо у вас вже є дійсний маркер доступу для користувача, ви можете отримати його дані за допомогоюuserFromTokenметод:

$user = Socialite::driver('github')->userFromToken($token);

Отримання даних користувача з маркера та секрету (OAuth1)

Якщо ви вже маєте дійсну пару маркера / секрету для користувача, ви можете отримати його дані за допомогоюuserFromTokenAndSecretметод:

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);