احراز هویت 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’,
],
]);
“`
امیدوارم مقاله آموزندهای بوده باشه.
