Публикации - Laravel

Аутентификация и авторизация - Авторизация с помощью Passport

Прежде чем начать, нужно определить, будет ли ваше приложение лучше обслуживаться Laravel Passport или Laravel Sanctum. Если приложение необходимо для поддержки OAuth2, вам следует использовать Laravel Passport. Однако, если вы пытаетесь аутентифицировать одностраничное приложение, мобильное приложение или выдавать токены API, вам следует использовать Laravel Sanctum. Laravel Sanctum не поддерживает OAuth2; однако он обеспечивает гораздо более простой опыт разработки аутентификации API.

О Laravel Passport

Laravel Passport предоставляет полную реализацию сервера OAuth2 для приложения Laravel. Passport построен на основе сервера League OAuth2. 

Словарь терминов - https://oauth2.thephpleague.com/terminology/

Установка и настройка Passport

Для авторизации через API можно воспользоваться официальным плагином - Passport (https://laravel.com/docs/8.x/passport)

Сперва установим плагин:

composer require laravel/passport

После чего выполним миграции:

php artisan migrate

Далее необходимо выполить artisan-команду passport:install, которая сгенерирует ключи шифрования:

php artisan passport:install

Далее переходим в модель User, и добавляем Laravel\Passport\HasApiTokens trait в модель App\Models\User:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

Далее необходимо обновить AuthServiceProvider:

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Passport\Passport;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Models\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        if (! $this->app->routesAreCached()) {
            Passport::routes();
        }
    }
}

И ещё необходимо изменить драйвер в файле config/auth.php

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

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Мы успешно установили Laravel Passport

Контроллер авторизации

Теперь можем приступить к созданию контроллера:

php artisan make:controller AuthController

В файле routes/api.php добавим маршрут:

Route::post('login', 'AuthController@postLogin');

А вот и сам контроллер

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;

class AuthController extends Controller
{
    public function postLogin(Request $request){
      if(Auth::attempt($request->only('email','passport'))){
          $user = Auth::user();
          $token = $user->createToken('admin')->accessToken;
          return [
            'token' => $token,  
          ];
      }
      return response([
          'error' => 'Invalid Authorize'
      ], Response::HTTP_UNAUTHORIZED);
    }
}

Для того чтобы протестировать и получить token в ответе, необходимо отправить post запрос, email и password по адресу:

 http://localhost:8000/api/login

Регистрация пользователей

Сперва добавим маршрут авторизации

Route::post('register', 'AuthController@postRegister');

Далее в контроллере AuthController добавим новый экшн postRegister:

    public function postRegister(Request $request){
        $user = User::create(
            $request->only('name', 'email')
            + ['password' => Hash::make($request->input('password'))]
        );
        return response($user, Response::HTTP_CREATED);
    }

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

 php artisan make:request RegisterRequest

Находим данный файл, и внесём в него следующие изменения:

    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required',
            'email' => 'required|email',
            'password' => 'required',
            'password_confirm' => 'required|same:password'
        ];
    }

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться


Изображения Видео

1. Подключение CKEditor https://artisansweb.net/install-use-ckeditor-laravel/#comments
2. Регистрация и авторизация https://know-online.com/post/laravel-reg
3. Что нового в Laravel 8 https://sergeymukhin.com/blog/chto-novogo-v-laravel-80
4. Авторизация Sanctum <iframe width="560" height="315" src="https://www.youtube.com/embed/MT-GJQIY3EU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>