من توی پروژه ام نیاز دارم که برای لاگین یا ثبت نام بعد ازوارد کردن شماره موبایل یه اس ام اس که شامل کد تایید هست بیاد و یک زمانی هم براش در نظر گرفته شده که وقتی زمانش تموم شه باید درخواست بده دوباره کد براش ارسال بشه
سوالی که دارم اینه که این زمان باید توی دیتابیس ذخیره بشه؟
توی خود جدول user یا یه جدول دیگه براش تعریف بشه؟
من برای این کار از 2 جدول استفاده کردم. یکی users
و active_codes
.
تو جدول active_codes
یک فیلد از نوع timestamp
به اسم expired_at
قرار دادم و با توجه به زمانی که توی اون ذخیره شده مشخص میکنم که کد اعتبار داره یا نه .
این فیلد های جدول active_codes
هستش.
user_id,code,expired_at
رابطه این جدول با users
رابطه یک به چند هستش یک کاربر میتونه چندین کد داشته باشه ولی یک کد فقط میتونه متعلق به یک کاربر باشه.
سلام در حالت کلی به صورت زیر این کار انجام می شود .
۱ . ایجاد کد اعتبار سنجی تصادفی
۲ . ارسال کد OTP به کاربربا استفاده از سرویس Api پنل sms و اضافه کردن اون به دیتابیس .
۳ . تایید کد ارسال شده به تلفن همراه کاربر و به روزرسانی وضعیت در دیتابیس .
۴ . نمایش وضعیت اعتبارسنجی پیامکی به کاربر مورد نظر .
دوست عزیز در مورد زمان باید بگم که باید تو دیتابیس ذخیره بشه بعد با جاوا اسکریپت می گیم که زمان صفر شد دوباره بیاد کد تایید ارسال کند موفق و سربلند باشید .😊
فقط جهت امنیت یادتون نره توی کنترلر قبل از ارسال کد جدید بررسی کنید که حتما زمان تمام شده باشد .
من برای این کار از 2 جدول استفاده کردم. یکی users
و active_codes
.
تو جدول active_codes
یک فیلد از نوع timestamp
به اسم expired_at
قرار دادم و با توجه به زمانی که توی اون ذخیره شده مشخص میکنم که کد اعتبار داره یا نه .
این فیلد های جدول active_codes
هستش.
user_id,code,expired_at
رابطه این جدول با users
رابطه یک به چند هستش یک کاربر میتونه چندین کد داشته باشه ولی یک کد فقط میتونه متعلق به یک کاربر باشه.
هر وقت که اون کد expire شد میتونین اون سطر جدولو حذف کنید
نمیشه؟ که برای هر کاربری فقط یه کد باشه
@MatinTayebi
در صورتی که به سرور دسترسی دارید، پیشنهاد میکنم که کد رو توی Redis ذخیره کنید
ردیس هم پس از پایان تایم به صورت خودکار حذف خواهد کرد و نیازی به چک کردن هم ندارید
سلام
@zafari.ma.8
یک جدول لازم دارید برای نگهداری otp که شامل ستون های id , userid , code , expiredat باشه حالا زمانی که کد رو تولید می کنید همون لحظه توی ستون expiredat زمان منقضی شدنش رو هم تعریف می کنید.
می تونید نوع رابطه این مدل رو با مدل یوزر به صورت One To Many تعریف کنید.
برای بررسی معتبر بودن کد هم می تونید به صورت زیر در مدل Otp اقدام کنید تا در کنترلرها به اون دسترسی داشته باشید.
public function scopeOtp($query , $code, $user)
{
return !! $user->Otp()->whereCode($code)->where('expired_at' , '>' , now())->first();
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟