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

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

608

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