استفاده از username به جای ایمیل در Laravel Breeze

597 بازدید 2 سال قبل 0 دیدگاه

اگر با لاراول و مخصوصا پکیج 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)

حالا که یک یوزر معتبر دیتابیس فراخوانی شد، پسوردی که کاربر ارسال کرده رو با رمزعبور فراخوانی شده از دیتابیس چک میکنه و اگر این دو با هم برابر بود (مقدار هش شده) اجازه ورود رو به کاربر میده

 

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

0 دیدگاه   (ارسال دیدگاه)