WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Аутентификация мобильного приложения с использованием токена в Laravel

618

Вы используете Laravel в качестве серверной части своего мобильного приложения? Если да, то, вероятно, вы ищете простое решение для аутентификации вашего мобильного приложения. Многие пользователи могут использовать ваше мобильное приложение, и вы хотите выполнить аутентификацию, чтобы предоставлять контент своим мобильным пользователям. В этой статье мы изучаем, как выполнять аутентификацию на основе токенов в Laravel. Вы также можете использовать тот же подход для аутентификации REST API.

Мы собираемся интегрировать Laravel Sanctum — облегченную систему аутентификации. Вы можете рассматривать его как замену аутентификации на основе OAuth.

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

При этом давайте посмотрим, как использовать 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черту модели User следующим образом.

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

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

Чтобы отправить токен-носитель с заголовком авторизации в каждом запросе, необходимо сначала выпустить токен 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 для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее