Аутентифікація мобільних додатків за допомогою маркера в Laravel
Чи використовуєте ви 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. Я хотів би почути ваші думки та пропозиції у розділі коментарів нижче.
Пов’язані статті
- Як створити щоденник за допомогою Laravel
- Посібник з додавання Google reCAPTCHA v3 до вашого веб-сайту Laravel
- Як завантажити відео на YouTube у програмі Laravel