امروزه اکثر برنامههای کاربردی تحت وب ترجیح میدهند به جای استفاده از نام کاربری/رمز عبور که یک سیستم احراز هویت کلاسیک برای اعتبارسنجی کاربران بود، از 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 ست کنید:
برای ارسال و اعتبارسنجی توکن به چند 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" }'
ممنون از وقت با ارزشی که گذاشتید و این مقاله رو مطالعه کردید.
امیدوارم که بتونید از این پکیج در پروژه های خود استفاده کنید.
برای خوندن داکیومنت این پکیج به آدرس گیت هاب زیر مراجعه کنید: