✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Аутентифікація мобільних додатків за допомогою маркера в Laravel

42

Чи використовуєте ви Laravel для задньої частини мобільного додатка? Якщо так, то, мабуть, ви шукаєте просте рішення для автентифікації мобільних додатків. Багато користувачів можуть використовувати ваш мобільний додаток, і ви хочете виконати автентифікацію, щоб показувати вміст своїм мобільним користувачам. У цій статті ми вивчаємо, як зробити автентифікацію на основі токенів у Laravel. Ви також можете використовувати той самий підхід для автентифікації REST API.

Ми збираємось інтегрувати Laravel Sanctum, яка є полегшеною системою автентифікації. Ви можете розглядати це як заміну автентифікації на основі OAuth.

Під час використання Sanctum маркери API користувача зберігаються в базі даних. Цей маркер потрібно відправити як Bearerмаркер через Authorizationзаголовок з вашого мобільного додатка до кінцевих точок API Laravel. Зазвичай ці маркери мають дуже тривалий термін дії (роки).

З огляду на це, давайте подивимось, як використовувати Sanctum для автентифікації мобільних додатків.

Встановіть та налаштуйте Laravel Sanctum

Для початку вам спочатку потрібно встановити пакет Sanctum до програми Laravel. Встановіть його за допомогою команди:

composer require laravel/sanctum

Після цього опублікуйте файли конфігурації та міграції Sanctum, виконавши наведену нижче команду.

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

Потім запустіть команду міграції, яка створить personal_access_tokensтаблицю у вашій базі даних. Це таблиця, де будуть зберігатися всі маркери API.

php artisan migrate

За замовчуванням для кожного запиту в Laravel потрібен маркер csrf. У випадку відсутності цього маркера csrf, Laravel не продовжує ваш запит. Що стосується генерації токенів API за допомогою Sanctum, нам потрібно пропустити надсилання маркера csrf. Для цього додайте sanctum/tokenмаршрут до $exceptзмінної app/Http/Middleware/VerifyCsrfToken.php. Я буду створювати цей sanctum/tokenмаршрут на наступних кроках.

<?php
...
class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'sanctum/token'
    ];
}

Для цілей автентифікації нам потрібно видати маркер користувачам. Отже, вам слід використовувати HasApiTokensознаку для моделі користувача наступним чином.

<?php
 
namespace AppModels;
...
use LaravelSanctumHasApiTokens;
 
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
    ...
}

Видача токенів API для автентифікації

Для того, щоб надіслати маркер Bearer із заголовком Authorization у кожному запиті, спочатку потрібно видати маркер API. Я збираюся створити метод, який генерує маркер API для кожного користувача. Щоб видати маркер, вам потрібно буде надіслати електронне повідомлення, пароль та пристрій користувача.

Додайте маршрут нижче в routes/web.php

Route::post('/sanctum/token', 'APITokenController@create_token');

Далі створіть контролер APITokenControllerза командою:

php artisan make:controller APITokenController

Визначте create_token()метод у новоствореному контролері наступним чином.

<?php
 
namespace AppHttpControllers;
 
use AppModelsUser;
use IlluminateHttpRequest;
use IlluminateSupportFacadesHash;
use IlluminateValidationValidationException;
 
class APITokenController extends Controller
{
    public function create_token(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required',
            'device_name' => 'required',
        ]);
     
        $user = User::where('email', $request->input('email'))->first();
 
        if (! $user ||! Hash::check($request->input('password'), $user->password)) {
            return [
                'error' => 'The provided credentials are incorrect.'
            ];
        }
     
        return $user->createToken($request->input('device_name'))->plainTextToken;
    }
}

Наведений вище код спочатку перевіряє облікові дані користувача. Якщо облікові дані правильні, то у відповідь він надсилає маркер у форматі простого тексту. Тут я отримую вхідні значення, враховуючи, що вони будуть надіслані в об’єкт JSON.

Спробуйте надіслати запит POST з обліковими даними користувача, і ви повинні отримати маркер простого тексту. Цей маркер API може зберігатися на мобільному пристрої та використовуватись у заголовку під час надсилання запитів API.

У моєму випадку я використовую розширення Rest Client коду VS, і мій запит на sanctum/tokenце, як показано на знімку екрана нижче.

Перейдіть до бази даних, і ви побачите, що ваш маркер зберігається в personal_access_tokensтаблиці.

Sanctum створюватиме кілька токенів кожного разу, коли ви потрапите в sanctum/tokenмаршрут із правильними обліковими даними. Якщо ви хочете відкликати попередній маркер, додайте наступний оператор перед останнім оператором повернення вищевказаного коду.

// Revoke previous tokens...
$user->tokens()->delete();
 
return $user->createToken($request->input('device_name'))->plainTextToken;

Нарешті, захистіть маршрути, додавши auth:sanctumпроміжне програмне забезпечення наступним чином.

Route::middleware('auth:sanctum')->get('/products', function() {
    // write a code
});

Проміжне програмне забезпечення перевіряє, якщо маркер отримано в заголовку авторизації. Якщо маркер API правильний, тоді лише він дозволяє рухатись по маршруту.

Наприклад, у коді VS ви можете надіслати маркер API як маркер передавача із заголовком авторизації, як показано нижче.

Сподіваюся, ви розумієте, як інтегрувати автентифікацію мобільних додатків за допомогою маркера в Laravel. Я хотів би почути ваші думки та пропозиції у розділі коментарів нижче.

Пов’язані статті

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі