نحوه پیاده سازی فراموشی رمز عبور در API

پرسیده شده
فعالیت 1397 روز پیش
دیده شده 1092 بار
0

سلام من از Passport برای پیاده سازی token و ... استفاده کردم

برای پیاده سازی فراموشی رمز عبور با استفاده از موبایل باید به چه روشی عمل کرد؟

فایل پیوست

وحید گروسی
وحید گروسی

9 تیر 99

1
حذف شده

از یک روشی استفاده کنید به عنوان مثال یک لینک تولید کنید که تاریخ انقضا داره و با اس ام اس ارسال کنید برای کاربر ...

یک جدول توی دیتابیس ایجاد کنید

یک url و یا کد فراموشی رمز رو توش ذخیره کنید

و بعد کاربر که کد رو برای api ارسال کرد با کتاب خونه carbon چک کنید تاریخش نگذشته باشه ...

و در آخر اگه همه چی اوکی بود اجازه آپدیت فیلد password رو بهش بدید

فایل پیوست

MohammadMoghadasi

توسط

MohammadMoghadasi

11 تیر 99

0
حذف شده

سلام محمد جان ممنون که پاسخ دادین
به دلیل اینکه ایمیلی نبود نمی خواستم از لینک استفاده کنم به همین جهت به روش زیر انجام دادم:
در درخواست اولیه:

 public function create(Request $request, OtpService $otpService)
    {
        $request->validate([
            'mobile' => 'required|regex:/(0)[0-9]/|not_regex:/[a-z]/|min:11',
        ]);
        $user = User::where('mobile', $request->mobile)->first();
        if ($user == null) {
            return response()->json([
                'message' => __('public.user.does_not_exist'),
                'status' => 404
            ], 404);
        }
        $resetPassword = $user->resetPassword()->first(); // Get reset password from database
        $result = $this->createResetPassword($resetPassword, $user, $otpService, $request);  // if Not exist  create new one or return null
        if ($result) {
            return response()->json([
                'message' => __('public.user.reset.otp_sent'),
                'status' => 200
            ], 200);
        }
        $resetPassword = $user->resetPassword()->first(); // Get reset password from database
        $diff = Carbon::now()->diffInMinutes($resetPassword->last_retry_at);
        if ($this->isPasswordRequestCountValid($resetPassword)) {
            if ($diff <= self::RETRY_EXPIRE_MINUTE && $diff > self::RETRY_MIN_EXPIRE_MINUTE) {
                $otpService->send($request->mobile, $resetPassword->otp);
                return response()->json([
                    'message' => __('public.user.reset.otp_sent'),
                    'status' => 200
                ], 200);
            }
        }

        if (!$this->isResetPasswordRequestValid($resetPassword, $diff)) {
            return response()->json([
                'message' => __('public.user.reset.too_many_requests', ['minute' => self::RETRY_EXPIRE_MINUTE - $diff]),
                'status' => 429
            ], 429);
        } else {
            $resetPassword->delete();
            return response()->json([
                'message' => 'unknown',
                'status' => 503
            ], 503);
        }
    }

 

در درخواست دوم:

 public function find(Request $request)
    {
        $this->validateUserForConfirmCode($request);
        $user = User::where('mobile', $request->mobile)->first();
        $result = $this->isValidOtpCodeForResetPassword($user);
        if (!$result) {
            return response()->json([
                'message' => __('public.user.unauthorized'),
            ], 401);
        }
        return response()->json([
            'message' => __('public.user.reset.successfully_finished'),
            'status' => 200,
        ], 200);
    }

 

 

و در نهایت در درخواست سوم:


    public function reset(Request $request, FirebaseNotification $firebaseNotification)
    {
        $request->validate([
            'mobile' => 'required|regex:/(0)[0-9]/|not_regex:/[a-z]/|min:11',
            'password' => 'required|string|confirmed',
            'otp' => 'required|integer|min:0000|max:9999'
        ]);
        $user = User::where('mobile', $request->mobile)->first();
        $passwordReset = PasswordReset::where([['otp', $request->otp], ['user_id', $user->id]])->first();
        if (!$passwordReset) {
            return response()->json([
                'message' => __('public.user.reset.unauthorized'),
                'status' => 400
            ], 400);
        }
        $user = User::where('id', $passwordReset->user_id)->first();
        if (!$user) {
            return response()->json([
                'message' => __('public.user.reset.not_found'),
                'status' => 400
            ], 400);
        }
        $user->password = Hash::make($request->password);
        $user->save();
        $passwordReset->delete();
        // Password Changed Successfully
        $title = __('public.notifications.reset_password_successfully_done');
        $body = __('public.notifications.reset_password_successfully_done_body');
        $image = '#';
        $badgeImage = '#';
        $firebaseNotification->notify($user->fcm_token, $title, $body, $image, $badgeImage);
        return response()->json([
            'message' => __('public.user.reset.confirmation_successfully_finished'),
            'status' => 200,
        ], 200);
    }

 

از پروژه های بعدی از رمز عبور یکبار مصرف استفاده می کنم و برای همیشه از شر رمز عبور خلاص میشم

فایل پیوست

وحید گروسی

توسط

وحید گروسی

11 تیر 99