🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ پویا پارسایی
چگونه با Laravel breeze ورود با ایمیل یا موبایل رو پیاده سازی کنیم؟
جامعه لاراول ایجاد شده در ۲۴ اردیبهشت ۱۴۰۱

سلام و عرض ادب.

توی Laravel Breeze ، کلاس LoginRequest و متد authenticate:

public function authenticate()
{
    $this->ensureIsNotRateLimited();
    if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
        RateLimiter::hit($this->throttleKey());
        throw ValidationException::withMessages([
            'email' => trans('auth.failed'),
        ]);
    }
    RateLimiter::clear($this->throttleKey());
}

این قسمت:

Auth::attempt($this->only('email', 'password') ...

امکانی داره که بتونیم توی این متد تعریف کنیم که اگه ایمیل وارد شده بود، ایمیل کاربر رو چک کن، اگه موبایل بود، موبایل کاربر رو چک کن و بعد با پسورد مطابقت بده و لاگین کن؟

اگر توی این قسمت نمیشه، قسمت دیگه ای Laravel breeze داره که بشه این قابلیت رو به برنامه‌مون اضافه کنیم؟

منظورم اینه که توی قابلیتای خود Laravel Breeze باشه، نه اینکه خودمون بیایم براش تعریف کنیم یا که شرط بذاریم.

سلام پویا عزیز وقت به خیر ?

بطور پیشفرض با استفاده از laravel breeze این امکان وجود نداره که چنین کاری انجام بدید ولی با یکسری تغییر کوچک در همین متد authenticate() میتونید به این هدف برسید:

public function authenticate()
{
    $this->ensureIsNotRateLimited();
    $user = User::where('email',$this->login)
        ->orwhere('mobile',$this->login)
        ->first();
    if (!$user || !Hash::check($this->password, $user->password)) {
        RateLimiter::hit($this->throttleKey());
        throw ValidationException::withMessages([
            'login' => trans('auth.failed'),
        ]);
    }
    Auth::login($user, $this->boolean('remember'));
    RateLimiter::clear($this->throttleKey());
}

در کد بالا پیشفرض یک فیلد login و password داریم و فیلد login میتونه ایمیل و یا شماره همراه قبول کنه.

موفق باشید ??

بهترین پاسخ
محمد حسن عاطفت ۲۴ اردیبهشت ۱۴۰۱، ۰۹:۴۸