رضا پارسیان
رضا پارسیان
خواندن ۳ دقیقه·۳ سال پیش

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

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

برای همه ما پیش آمده که توی پروژه های تحت وبی که داریم نیاز شده یکسری api هم ارئه بدیم. توی این مقاله می‌خوام ساده ترین راه authenticate کاربران توی لاراول رو بهتون نشون بدم، با من همراه باشید.

شروع

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

composer create-project laravel/laravel api

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

composer require laravel/ui

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

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

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

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

$table->string(&quotapi_token&quot)->nullable()->unique();

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

protected $fillable = [ 'name', 'email', 'password', &quotapi_token&quot, ];

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

'guards' => [ . . ., &quotapi&quot=>[ &quotdriver&quot=>&quottoken&quot, &quotprovider&quot=>&quotusers&quot, ] ],
اگر می‌خواید از فیلد خاصی برای احرازهویت استفاده کنید باید در آرایه بالا storage_key رو برابر با فیلد موردنظر خودتون قرار بدید.

ساخت route جدید

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

Route::get(&quotuser/all&quot,function (){ return \App\User::all(); })->middleware(&quotauth:api&quot);

ساخت توکن

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

Route::post(&quotlogin&quot,[\App\Http\Controllers\Api\AuthenticateController::class,&quotlogin&quot]); Route::post(&quotregister&quot,[\App\Http\Controllers\Api\AuthenticateController::class,&quotregister&quot]);

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

public function login(Request $request): \Illuminate\Http\JsonResponse { $valid = $request->validate([ &quotemail&quot => [&quotrequired&quot, &quotemail&quot], &quotpassword&quot => [&quotrequired&quot] ]); if (!auth()->attempt($valid)) return response()->json([ &quotmessage&quot => &quotInvalid credentials&quot ], ۴۰۱); $user =auth()->user(); $user->update([ &quotapi_token&quot => \Illuminate\Support\Str::random(۶۰) ]); return response()->json([ &quotmessage&quot => &quotSuccessfully logged in&quot, &quotuser&quot => $user ]); } public function register(Request $request): \Illuminate\Http\JsonResponse { $valid= $request->validate([ &quotname&quot => [&quotrequired&quot], &quotemail&quot => [&quotrequired&quot, &quotemail&quot,&quotunique:users&quot], &quotpassword&quot => [&quotrequired&quot] ]); $valid['api_token'] = \Illuminate\Support\Str::random(۶۰); $valid['password'] = bcrypt($valid['password']); $user = \App\Models\User::create($valid); return response()->json([ &quotmessage&quot => &quotSuccessfully registered&quot, &quotuser&quot => $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', ], ]);

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

https://rp76.ir/blog/post/%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-api-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D8%B3%D8%A7%D8%AF%D9%87


laravelauthenticateapiاحراز هویتلاراول
الان لاراول کار می‌کنم ولی هنوز سایتم همونه https://Rp76.ir
شاید از این پست‌ها خوشتان بیاید