В этом руководстве мы разработаем полную систему аутентификации API, которая может использоваться любым приложением, способным выполнять запросы (например, React, Vue или Angular).

Мы будем использовать Laravel 7+ и его пакет: https://laravel.com/docs/7.x/passport

Начнем! 👨‍💻

Я рассчитываю что у вас уже установлен Laravel 🙂 Поэтому просто выполните в консоли эти команды

composer require laravel/passport
php artisan make:auth
php artisan passport:install
php artisan migrate

После этого переходим в файл App\User и добавляем трейт Laravel\Passport\HasApiTokens

Долее переходим в app/Providers/AuthServiceProviderPassport в boot метод:

public function boot() {
    $this->registerPolicies();
    Passport::routes();
}

И, наконец, установите драйвер для защиты аутентификации API в файле config/auth.php:

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

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

Laravel Passport теперь установлен и настроен, теперь мы создадим контроллер для:

  • Создания аккаунта
  • Логина
  • Выхода

Поехали! Создайте свой новый контроллер:

php artisan make:controller Api/AuthController

В этом новом контроллере мы создадим 3 функции: регистрация, вход в систему и выход из системы.

Добавьте вверху файла:

use App\User;
use Illuminate\Support\Facades\Validator;

Создайте 3 функции:

public function register (Request $request) {

    $validator = Validator::make($request->all(), [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);

    if ($validator->fails())
    {
        return response(['errors'=>$validator->errors()->all()], 422);
    }

    $request['password']=Hash::make($request['password']);
    $user = User::create($request->toArray());

    $token = $user->createToken('Laravel Password Grant Client')->accessToken;
    $response = ['token' => $token];

    return response($response, 200);

}
public function login (Request $request) {

    $user = User::where('email', $request->email)->first();

    if ($user) {

        if (Hash::check($request->password, $user->password)) {
            $token = $user->createToken('Laravel Password Grant Client')->accessToken;
            $response = ['token' => $token];
            return response($response, 200);
        } else {
            $response = "Password missmatch";
            return response($response, 422);
        }

    } else {
        $response = 'User does not exist';
        return response($response, 422);
    }

}
public function logout (Request $request) {

    $token = $request->user()->token();
    $token->revoke();

    $response = 'You have been succesfully logged out!';
    return response($response, 200);

}

Почти все 😎

Теперь мы можем добавить наши роуты в route/api.php. Маршруты регистрации и входа в систему являются общедоступными, а маршрут выхода из системы будет доступен только после входа пользователя в систему.

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

    // public routes
    Route::post('/login', 'Api\AuthController@login')->name('login.api');
    Route::post('/register', 'Api\AuthController@register')->name('register.api');

    // private routes
    Route::middleware('auth:api')->group(function () {
        Route::get('/logout', 'Api\AuthController@logout')->name('logout');
    });

Теперь вы можете использовать любой инструмент для имитации http-запросов.

Не стесняйтесь задавать мне свои вопросы в разделе комментариев 👇

Напишите свой комментарий 🧐