اگر با لاراول و مخصوصا پکیج Laravel Breeze کار کرده باشی میدونی که در حالت پیش فرض، لاگین (Login) کاربر با استفاده از ایمیل و رمزعبور انجام میشه. ولی خیلی اوقات ما لازم داریم که لاگین کاربر با استفاده از username یا موبایل یا …. انجام بشه.
خوشبختانه این کار خیلی راحت در لاراول قابل انجامه و در این مقاله ما ایمیل رو به username تغییر میدیم و این کار رو با استفاده از Laravel Breeze و InertiaJs انجام میدیم.
اول ازهمه این فایل رو باز کن:
\app\Http\Requests\Auth\LoginRequest.php
همونطور که میتونی حدس بزنی، باید Rule ها رو تغییر بدی. نتیجه نهایی باید به شکل زیر باشه:
// LoginRequest.php file
public function rules() {
return [
'username' ⇒ ['required', 'string'],
'password' ⇒ ['required', 'string']
];
}
حالا داخل همون فایل یک متد ()authenticate می بینی که داخل اون از متد ()Auth::attempt استفاده شده. شما باید Auth::attempt رو با کد زیر جایگزین کنی
// LoginRequest.php file
if (! Auth::attempt($this->only('username', 'password'), $this->boolean( 'remember'))) {
}
حالا بیا برو توی این فایل:
\𝗿𝗲𝘀𝗼𝘂𝗿𝗰𝗲𝘀\𝗷𝘀\𝗣𝗮𝗴𝗲𝘀\𝗔𝘂𝘁𝗵\𝗟𝗼𝗴𝗶𝗻.𝘃𝘂𝗲
و مقدار متغیر form رو به این صورت تغییر بده:
// \resources\js\Pages\Auth\Login.vue file
const form = useForm({
username: '',
password: '',
remember : false
});
دوباره توی همون فایل اینپوت email رو تغییر بده به اینپوت username که نتیجه اش باید به این شکل در بیاد:
// \resources\js\Pages\Auth\Login.vue file
<div>
<BreezeLabel for="username" value="Username"/>
<BreezeInput
id="username"
type="text"
class="mt-1 block w-full"
v-model="form.username"
required autofocus autocomplete="username"
/>
</div>
همین! الان دیگه میتونی به جای ایمیل و پسورد، با username و password توی لاراول لاگین کنی
به عنوان یه توضیح کوتاه این رو هم بهت بگم که تابع ()Auth::attempt به عنوان اولین پارامتر، آرایه ای از فیلدها رو قبول میکنه که بعد، مشخصات ورود کاربر رو هم با استفاده از همون فیلدها بررسی میکنه. تابع ()attempt خودش در پشت پرده تابع ()retrieveByCredentials رو صدا میکنه که این تابع یک رکورد از مدل User رو از دیتابیس فراخوانی میکنه (در این مثال با استفاده از فیلد username)
حالا که یک یوزر معتبر دیتابیس فراخوانی شد، پسوردی که کاربر ارسال کرده رو با رمزعبور فراخوانی شده از دیتابیس چک میکنه و اگر این دو با هم برابر بود (مقدار هش شده) اجازه ورود رو به کاربر میده
امیدوارم که این مقاله بدردت خورده باشه