احراز هویت API در لاراول (ساده)

## شروع

قبل از هر کاری باید یه پروژه لاراول داشته باشیم یا یکی جدید شروع کنیم!
من با دستور زیر یه پروژه جدید می‌سازم.

“`
composer create-project laravel/laravel api
“`

تنها پیشنیازی که وجود داره Auth لاراول هست که با دستور زیر اون رو هم نصب می‌کنم!!

“`
composer require laravel/ui
“`

## تنظیمات پروژه

بعد از نصب لاراول و احراز هویت اون وقت تنظیم کردن دیتابیس، مایگریشن ها و بقیه چیز هاست…
توی فایل `.env` تنظیمات مربوط به دیتا بیس رو تنظیم می‌کنیم.

“`
DB_DATABASE=laravel #اسم دیتابیس
DB_USERNAME=root # نام کاربری
DB_PASSWORD= # پسورد
“`

بعد از اون باید یک تغییر کوچولو توی مایگریش مربوط به `user` باید داشته باشیم

“`
$table->string(\”api_token\”)->nullable()->unique();
“`

و این فیلد جدید رو توی مدل `user` باید `fillable` کنیم که بتونیم بعدا بهش چیزی اضافه کنیم!

“`
protected $fillable = [
‘name’,
’email’,
‘password’,
\”api_token\”,
];
“`

حالا توی فایل `config/auth.php` باید یک `guard` جدید تعریف کنیم!

“`
‘guards’ => [
.
.
.,
\”api\”=>[
\”driver\”=>\”token\”,
\”provider\”=>\”users\”,
]
],
“`

> اگر می‌خواید از فیلد خاصی برای احرازهویت استفاده کنید باید در آرایه بالا `storage_key` رو برابر با فیلد موردنظر خودتون قرار بدید.

## ساخت route جدید

برای استفاده از توکن توی `route` هایی که نیاز دارید باید از `middleware auth:api` استفاده کنید.

“`
Route::get(\”user/all\”,function (){
return \App\User::all();
})->middleware(\”auth:api\”);
“`

## ساخت توکن

برای ایجاد توکن به یک `route` و `controller` نیاز داریم
توی ترمینال دستور زیر رو وارد می‌کنیم
`php artisan make:controller Api/AuthenticateController`
برای ساخت `route` هم توی فایل `routes/api.php` به صورت زیر اقدام با ساخت route های احراز هویت می‌کنیم!

“`
Route::post(\”login\”,[\App\Http\Controllers\Api\AuthenticateController::class,\”login\”]);
Route::post(\”register\”,[\App\Http\Controllers\Api\AuthenticateController::class,\”register\”]);
“`

حالا باید کد های کنترلر رو بنویسیم

“`
public function login(Request $request): \Illuminate\Http\JsonResponse
{
$valid = $request->validate([
\”email\” => [\”required\”, \”email\”],
\”password\” => [\”required\”]
]);

if (!auth()->attempt($valid))
return response()->json([
\”message\” => \”Invalid credentials\”
], ۴۰۱);

$user =auth()->user();
$user->update([
\”api_token\” => \Illuminate\Support\Str::random(۶۰)
]);

return response()->json([
\”message\” => \”Successfully logged in\”,
\”user\” => $user
]);
}
public function register(Request $request): \Illuminate\Http\JsonResponse
{
$valid= $request->validate([
\”name\” => [\”required\”],
\”email\” => [\”required\”, \”email\”,\”unique:users\”],
\”password\” => [\”required\”]
]);

$valid[‘api_token’] = \Illuminate\Support\Str::random(۶۰);
$valid[‘password’] = bcrypt($valid[‘password’]);

$user = \App\Models\User::create($valid);

return response()->json([
\”message\” => \”Successfully registered\”,
\”user\” => $user
]);
}
“`

> چون فیلدی که توی دیتابیس ذخیره کردیم محدودیت ۲۵۵ کارکتری داره مجاز هستم هرجوری که دوست داریم توکن رو بسازیم!
خب دیگه تموم هست فقط میمونه ارسال توکن به پروژه و احرازهویت توکن و کاربر، برای این کار هم

>یادتون نره که پسور رو `hash` کنید

## ارسال توکن

خب بعد از این همه دردسر وقت اون می‌رسه که توکن رو ارسال کنیم، برای اینکار چندتا راه وجود داره

#### Query String
می‌تونید `token` ساخته شده رو به صورت زیر به سایت خودتون ارسال کنید.

“`
$response = $client->request(‘GET’, ‘/api/user?api_token=’.$token);
“`

#### Request Payload

“`
$response = $client->request(‘POST’, ‘/api/user’, [
‘headers’ => [
‘Accept’ => ‘application/json’,
],
‘form_params’ => [
‘api_token’ => $token,
],
]);
“`

#### Bearer Token

“`
$response = $client->request(‘POST’, ‘/api/user’, [
‘headers’ => [
‘Authorization’ => ‘Bearer ‘.$token,
‘Accept’ => ‘application/json’,
],
]);
“`

امیدوارم مقاله آموزنده‌ای بوده باشه.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *