مشکات
2 سال پیش توسط مشکات مطرح شد
9 پاسخ

hاستفاده از where

سلام
خسته نباشید
من میخواهیم کد زیر رو اجرا کنم اما بهم ارور میده
خیلی ساده هست ولی نمیدونم ایرادش چیه
ممنون میشم راهنماییم کنید

  public function login(Request $request){
       $phone = $request->input('phone_number');
       $code = $request->input('confirmation_code');
    //    return [$phone,$code];

    $checkPhone = CodeVerification::where('phone_number' , $phone)->first();
    $checkCode = CodeVerification::where('confirmation_code' === $code)->first()->get()->id;

    dd($checkPhone);
   }

 تصویر


ثبت پرسش جدید
woz
تخصص : fan of open source world
@wozniak 2 سال پیش آپدیت شد
0
...
  $checkCode = CodeVerification::where('confirmation_code' === $code)->first()->get()->id;
....

این قسمت از کد رو تغییر بدهید :

  $checkCode = CodeVerification::where('confirmation_code' , $code)->first()->get()->id;

مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

@wozniak
خیلی ممنونم
اون قسمت از کدم مشکلش برطرف شد
من میخوام یک سیستم OTP رو پیاده سازی کنم
نمسدونم باید چطوری چک کنم که کد EXPIRE شده یا نه
خیلی خیلی ممنون میشم اکر کمی راهنماییم کنید


woz
تخصص : fan of open source world
@wozniak 2 سال پیش مطرح شد
0

منظورتون از سیستم OTP چیست


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

من میخوام یک کد رو اول تولید کنم و بعد به شماره موبایلی که کاربر وارد کرده ارسال کنم


woz
تخصص : fan of open source world
@wozniak 2 سال پیش مطرح شد
1

@meshkat31
آن طور که متوجه شدم شما میخواهید یک سیستم Verify کاربر براساس شماره تلفن رو پیاده کنید. مواردی که در زیر خدمتتون عرض می کنم برای لاگین کاربر هستش و در صورتی که بخواهید ثبت نام کاربر رو پیاده کنید متفاوت هستش ( یعنی فرض می کنیم کاربر قبلا عضو شده و شما می خواهید اون رو لاگین کنید ) فلو برنامه به این صورت هستش و کدها رو نمیارم اینجا ( سعی کنید خودتون کد نویسی کنید در صورت داشتن مشکل در نوشتن کد ها و طراحی دیتابیس سوال بپرسید) :
1 - ابتدا نیاز به یک صفحه دارید که توی اون شماره تلفن رو از کاربر دریافت کنید
2 - سپس شماره تلفن دریافت شده رو از دیتابیس بررسی می کنید آیا کاربری با این شماره تماس قبلا عضوشده یا خیر(؟) در صورتی که عضو نشده بود به صفحه قبل برگشته و پیغام اینکه شما هنوز عضو نشده اید را به کاربر نشان می دهید و درصورتی که قبلا عضو شده بود ادامه بدید ( مورد 3 )
3 - باید شما کد تصادفی تولید شده ای برای کاربر generate کنید و از طریق api مربوط به سرویس پیامکیتون اون رو به کاربر ارسال کنید. همچنین توکن منحصر به فردی برای این کاربر تولید کنید ( مثلا حداقل 40 کاراکتر ). توجه داشته باشید که این کد و زمان ارسال کد و همچنین توکنی برای وریفای کاربر رو داخل دیتابیس ذخیره کنید ( مثلا در دو فیلد verify_code , verify_send_time , verify_token که به جدول users اضافه می کنید - البته پیشنهاد من استفاده از یک جدو جداگانه برای این کار است) . البته در نظر داشته باشید که علاوه بر 3 فیلد بالا به فیلدی برای نگه داری تعداد تلاش کاربر برای وریفای نیاز دارید.
4 - در مرحله ی چهار باید کاربر رو به صفحه ی verify بفرستید و توکن رو در این صفحه در فیلدی hidden تعبیه کنید که وقتی یوزر کد رو میفرسته ، در بک اند علاوه بر مقایسه کد وارد شده ،توکن رو هم مقایسه کنید. درصورت صحیح بودن تمام این موارد می توانید کاربر رو به وسیله ی کد لاگین کنید و اون رو به داشبوردش هدایت کنید . در صورتی که کد وارد شده صحیح نباشد باید پیام به یوزر نشان دهید که کد اشتباه است و یک عدد از تعداد تلاش باقیمانده کم کنید . درصورتی که تعداد تلاش ممکن کاربر به صفر رسید verify کدی که ذخیره کردید باید پاک شود و دوباره کاربر به صفحه ی لاگین باز گردد که امکان تلاش دوباره نداشته باشد.
یه سری ریزه کاری هم داره جهت داشتن امنیت بیشتر سیستمتون که در صورت نیاز عرض می شود


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 2 سال پیش مطرح شد
0

سلام به شما دوست عزیز.
روندی که دارید میرید اشتباه هست.
باید مراحل زیر رو طی کنید.
1- کاربر شماره موبایل خودشو وارد میکنه.
2- بعد باید چک کنید که اصلا این شماره موبایل وجود داره یا نه، اگه وجود داشت که کد واسش ارسال بشه ولی اگر نبود یه ارور نمایش بده، مثلا چنین شماره موبایلی وجود ندارد.
3- حالا اگه کد تایید رو وارد کرد و درست بود، توکن واسش ایجاد بشه، در غیر این صورت ارور بده که کد صحیح نیست.
روندش میشه به این صورت که خدمتتون عرض کردم، حالا اگه بازم متوجه نشدید و واستون مبهم بود، بگید تا واستون نمونه کد ارسال کنم.
امیدوارم مفید بوده باشه.
موفق باشید.


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش آپدیت شد
0

سلام و رحمت
خسته نباشید
بی نهایت ممنونم از توضیحات کاملتون@wozniak
@rezajahangir

public function generateOtp(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'phone_number' => 'required'
        ]);

        if ($validator->fails()) {
            return response()->json($validator->errors()->first(), 422);
        }

        $otp = mt_rand(1000,9999);
        $result = CodeVerification::create([
            'phone_number' => $request->phone_number,
            'confirmation_code' =>  $otp
        ]);
        return $result;
        // return response()->json(['verification_code ' => $otp]);
        // dd($otp);
    }

public function login(Request $request)
   {
        $phone = $request->input('phone_number');
        $code = $request->input('confirmation_code');
        //    return [$phone,$code];

        $result =CodeVerification::where('phone_number',$phone)->where('confirmation_code',$code)->first();
        // dd($result);
        $otp_expires_time = Carbon::now()->addMinutes(3);

        if($result->exists()){
            if(!$otp_expires_time > Carbon::now()){
                $otp = mt_rand(1000,9999);
                $updateOtp =$result->update([
                'confirmation_code' =>  $otp
            ]);
            return $updateOtp;
            }
            $authenticated_user=User::where('phone_number', $phone);
            if ($authenticated_user->exists()) {
                $user = User::find($authenticated_user->first()->id);
                $success['token'] =  $user->createToken('Personal Access Token')-> accessToken;
                return response()->json(['success' => $success]); 
            }
            else{
                $newUser=User::create([
                    'phone_number'=> $phone,
                    'role_id'=>1
                ]);
                $user= User::find($newUser->first()->id);
                $success['token'] =  $user->createToken('Personal Access Token')-> accessToken;
                return response()->json(['success' => $success]);
            }
        }

        return "by";
   }

این کد من هست
من میخوام چک کنم که این otpکدی ک ایجاد میکنم expire نشده باشه برای کاربر توکن ایجاد بشه
ممنون میشم اگر یک نگاهی به کدم بیندازید و ایراداتش رو بهم بگید


فرشید مرادی
تخصص : noob
@eniack 2 سال پیش مطرح شد
0

سلام وقت بخیر ، شما باید به کد رندومی که برای یوزر فرستاده شده دسترسی پیدا کنید و این شرط رو چک کنید(شخصی سازیش کنید)

$user->activeCode()->where('expired_at' , '>' , now())->first();

درواقع چک میشه که کد شما معتبر هستش یا خیر(با این کد شما سرو کار داره!
$otp_expires_time = Carbon::now()->addMinutes(3);)


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

@eniack
خیلی ممنونم از راهنماییتون🌺
یک سوال دیگه
چطور میتونم کدی بنویسم برای جلوگیری از اینکه کاربر پشت سر هم کد اشتباه وارد کنه و مدام درخواست نفرسته به سرور
راهی داره ؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام