Загрузка...

Guards в Laravel: что это и как использовать

laravel cover

В Laravel аутентификация пользователей организована с помощью guards и providers. Понимание этих понятий важно, если вы хотите гибко управлять авторизацией, особенно при работе с API или несколькими типами пользователей.


Что такое Guard?

Guard – это механизм, который определяет как именно Laravel аутентифицирует пользователя.

  • Provider отвечает за откуда берутся данные пользователя (например, таблица users).
  • Guard отвечает за способ проверки данных и хранения состояния (сессия, токен и т.д.).

Проще говоря:

  • Guard = как проверить пользователя.
  • Provider = откуда взять пользователя.

Настройка Guards

Настройки guard’ов находятся в файле config/auth.php.

Пример стандартной конфигурации:

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],
  • web – для обычного сайта (использует сессии и куки).
  • api – для API (использует токены).

Использование Guards

Авторизация пользователя

use Illuminate\Support\Facades\Auth;

if (Auth::guard('web')->attempt(['email' => $email, 'password' => $password])) {
    // Пользователь успешно авторизован
}

Проверка авторизации

if (Auth::guard('web')->check()) {
    $user = Auth::guard('web')->user();
}

Логаут

Auth::guard('web')->logout();

Middleware

Можно ограничивать доступ к маршрутам по guard’у:

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware('auth:web');

Несколько типов пользователей

Иногда нужно разделить авторизацию для, например, админов и обычных пользователей. Для этого создаём отдельные guards и providers.

Guards в Laravel

Конфигурация auth.php:

'guards' => [
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    'user' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

'providers' => [
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
],

Пример контроллера авторизации для админов:

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AdminLoginController extends Controller
{
    public function showLoginForm()
    {
        return view('admin.login');
    }

    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::guard('admin')->attempt($credentials)) {
            return redirect()->intended('/admin/dashboard');
        }

        return back()->withErrors(['email' => 'Неверные данные']);
    }

    public function logout()
    {
        Auth::guard('admin')->logout();
        return redirect('/admin/login');
    }
}

Middleware для админов:

Route::prefix('admin')->middleware('auth:admin')->group(function () {
    Route::get('/dashboard', function () {
        return view('admin.dashboard');
    });
});

Итог

  • Guard – определяет способ аутентификации пользователя.
  • Provider – определяет источник данных пользователя.
  • Для стандартного сайта обычно достаточно web.
  • Для API или нескольких типов пользователей создаются отдельные guards.

Такой подход позволяет легко управлять авторизацией для разных частей приложения, например, для админки и фронтенда сайта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *