Laravel Passport предоставляет полноценную реализацию сервера OAuth2 для вашего Laravel-приложения, позволяя клиентам получать токены доступа для доступа к защищенным ресурсам. В этом руководстве мы рассмотрим, как настроить и использовать Laravel Passport для аутентификации через OAuth2.

1. Установка Laravel Passport

Для начала убедитесь, что у вас установлен Laravel и Composer. Создайте новый проект Laravel, если у вас его еще нет:

composer create-project --prefer-dist laravel/laravel passport-example

Перейдите в директорию проекта:

cd passport-example

Установите Laravel Passport через Composer:

composer require laravel/passport

2. Настройка Passport

После установки Passport, выполните команду миграции для создания необходимых таблиц в базе данных:

php artisan migrate

Затем, запустите команду установки Passport:

php artisan passport:install

Эта команда создаст ключи шифрования, необходимые для генерации токенов доступа.

3. Регистрация Passport в AuthServiceProvider

Откройте файл app/Providers/AuthServiceProvider.php и добавьте вызов метода Passport::routes в метод boot:

use Laravel\Passport\Passport;

public function boot()
{
    $this->registerPolicies();

    Passport::routes();
}

4. Настройка модели User

Добавьте трейт Laravel\Passport\HasApiTokens в модель User:

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

5. Настройка маршрутов

В routes/api.php добавьте маршруты для регистрации, входа в систему и получения токена доступа:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\Auth\LoginController;

Route::post('/register', [RegisterController::class, 'register']);
Route::post('/login', [LoginController::class, 'login']);

Route::middleware('auth:api')->group(function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
});

6. Создание контроллеров

Создайте контроллеры для регистрации и входа в систему:

php artisan make:controller Auth/RegisterController
php artisan make:controller Auth/LoginController

В RegisterController добавьте метод для регистрации:

use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:8|confirmed',
        ]);

        $user = User::create([
            'name' => $validatedData['name'],
            'email' => $validatedData['email'],
            'password' => Hash::make($validatedData['password']),
        ]);

        return response()->json(['message' => 'User registered successfully']);
    }
}

В LoginController добавьте методы для входа в систему и получения токена доступа:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

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

        if (!Auth::attempt($credentials)) {
            return response()->json(['message' => 'Invalid credentials'], 401);
        }

        $token = Auth::user()->createToken('MyApp')->accessToken;

        return response()->json(['token' => $token]);
    }
}

7. Тестирование аутентификации

Используйте инструменты, такие как Postman или Insomnia, для тестирования аутентификации. Вы можете зарегистрировать нового пользователя, войти в систему и получить токен доступа, используя созданные маршруты.

Заключение

Laravel Passport предоставляет удобный и мощный способ реализации OAuth2 в вашем Laravel-приложении. Это позволяет легко интегрировать аутентификацию через OAuth2, обеспечивая безопасный доступ к вашим API. Для более глубокого погружения в Laravel Passport рекомендуется изучить официальную документацию.