Back-End Developer
احراز هویت کاربران با رمز یکبار مصرف (OTP) در لاراول

امروزه اکثر برنامههای کاربردی تحت وب ترجیح میدهند به جای استفاده از نام کاربری/رمز عبور که یک سیستم احراز هویت کلاسیک برای اعتبارسنجی کاربران بود، از OTP استفاده کنند. زیرا، این راه امن تر است و برخلاف رمزهای عبور استاتیک، در برابر حملات مجدد آسیب پذیر نیستند.
شاید شما نیز دغدغه ی پیاده سازی رمز عبور یک بار مصرف را به عنوان یک توسعه دهنده وب در فریم ورک لاراول را داشته باشید.
دغدغه هایی از قبیل:
- چگونه می توانم یک توکن امن تولید کنم؟
- توکن تولید شده را کجا باید ذخیره کنم؟
- آیا توکن معتبر است یا خیر؟
- آیا توکن منقضی شده است یا خیر؟
- چگونه می توانم یک سیستم یکپارچه و همچنین قابل استفاده برای سطوح کاربران مختلف داشته باشم؟
- و غیره...
خب، یک خبر خوب! ما به تازگی پکیجی ای را منتشر کرده ایم که میتوانید به راحتی احراز هویت کاربران خود را با رمز یکبار مصرف در فریم ورک لاراول پیاده سازی کنید.
روش های استفاده
در اینجا مثال هایی از روش های استفاده رو باهم مرور میکنیم و در ادامه مراحل نصب و پیاده سازی رو پیش می بریم:
# Send OTP via SMS.
OTP()->send('09130000000');
# OR
OTP('09130000000');
# Send OTP via channels.
OTP()->channel(['otp_sms', 'mail', \CustomSMSChannel::class])->send('09130000000');
# OR
OTP('09130000000', ['otp_sms', 'mail', \CustomSMSChannel::class]);
# Send OTP for specific user provider
OTP()->useProvider('admins')->send('09130000000');
# Validate OTP
OTP()->validate('09130000000', 'token_123');
# OR
OTP('09130000000', 'token_123');
# OR
OTP()->useProvider('users')->validate('09130000000', 'token_123');
شروع
ابتدا باید پکیج لاراول OTP را از طریق composer نصب کنید:
composer require fouladgar/laravel-otp
سپس، فایل config/otp.php را با اجرای دستور زیر منتشر کنید:
php artisan vendor:publish --provider="Fouladgar\OTP\ServiceProvider" --tag="config"
آماده سازی مدل
در مرحله بعد، مطمئن شوید که مدل مورد نظر اینترفیس Fouladgar\OTP\Contracts\OTPNotifiable را پیاده سازی کرده و همچنین از تریت Fouladgar\OTP\Concerns\HasOTPNotify استفاده می کند:
یک OTPSMSCchannel پیشفرض وجود دارد که برای ارسال توکن تولید شده به کاربر، به یک SMSClient نیاز دارد.
پس باید ابتدا SMSClient خود را مشخص کرده و اینترفیس Fouladgar\OTP\Contracts\SMSClient را پیاده سازی کنید. این اینترفیس شما را ملزم به پیاده سازی متد sendMessage می کند.
این متد شامل یک آبجکتی است که حاوی mobile و OTP کاربر میباشد که میتوانید با استفاده از سرویس SMS خود آنها را ارسال کنید.
در مرحله بعد، باید کلاس SampleSMSClient را در فایل config/otp.php ست کنید:
راه اندازی Routes و Controller
برای ارسال و اعتبارسنجی توکن به چند route نیاز داریم.
میتوانید آنها را در فایل web یا api اضافه کنید. بستگی به این دارد که بخواهید از OTP به عنوان Full Stack یا API Back-End استفاده کنید. این به شما بستگی دارد. در این مقاله ترجیح می دهم از راه دوم استفاده کنم.
فایل routes/api.php را باز کنید و این route ها را قرار دهید:
و سپس یک کنترلر AuthController.php مانند کلاس زیر ایجاد کنید:
متد validate کاربر احراز شده را برمیگرداند و شما میتوانید بر اساس سیستم خود عملیات login را پیاده سازی کنید.
با فرض استفاده از Sanctum شما کدی شبیه زیر را خواهید داشت:
$token = $user->createToken('your_device_name')->plainTextToken;
return response()->json([
'message' => 'Login has been successfully.',
'token' => $token,
'result' => UserResource::make($user),
])
حالا می توانید route های زیر را call کنید:
# send otp request
curl --request POST \
--url http://localhost/api/send-otp \
--data '{
"mobile" : "09130000000"
}'
# validate otp request
curl --request POST \
--url http://localhost/api/validate-otp \
--data '{
"mobile" : "09130000000",
"token" : "94352"
}'
ممنون از وقت با ارزشی که گذاشتید و این مقاله رو مطالعه کردید.
امیدوارم که بتونید از این پکیج در پروژه های خود استفاده کنید.
برای خوندن داکیومنت این پکیج به آدرس گیت هاب زیر مراجعه کنید:
مطلبی دیگر از این نویسنده
ساخت فیلتر برای Eloquent Models با بررسی مجوز فیلتر
مطلبی دیگر در همین موضوع
هشدار بدافزار: کاربران ایرانی لدجر هشیار باشند!
بر اساس علایق شما
دیکتاتور