سوال بپرسید
0

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

سوال بپرسید

من با لاراول نسخه 5.7 کار می کنم و از Authentication خود لاراول استفاده و با دستور php artisan make:auth سیستم ثبت نام و عضویت پیش فرض لاراول را نصب کرده ام. حال می خواستم کاری کنم که به هنگام ورود به جای دریافت email (ایمیل) از کاربر، شماره موبایل یا username (نام کاربری) دریافت و اعتبارسنجی انجام شود. برای این کار باید چه مسیرهایی را ویرایش کنم؟

برچسب ها:
گزارش سوال
پرسیده شده در 13 روز پیش
آمار بازدید: 137
pirniak (77)

1 پاسخ

2
20 اسفند 97 در 11:16

برای انجام اینکار، لاراول امکانات مناسبی را در اختیار ما گذاشته است. هنگامیکه شما لاراول را نصب می کنید یک صفحه لاگین به صورت پیش فرض برای شما در مسیر زیر ایجاد می شود که می توانید آن را بسته به نیاز خود ویرایش کنید:

resources -> views -> auth -> login.blade.php

اما برای بخش کنترلر یا به عبارت دیگر پردازنده مرکزی یک مقداری باید حوصله به خرج بدید و فرآیند زیر را دنبال کنید:

ابتدا به مسیر زیر رفته

app -> Http -> Controllers -> Auth

سپس فایل LoginController.php را باز کنید و یک کلاس مشابه زیر در آن بنویسید:

<?php
 
namespace App\Http\Controllers\Auth;
 
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
 
class LoginController extends Controller
{
 
    use AuthenticatesUsers;
    protected $redirectTo = '/home';
 
    protected $username;
 
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
 
        $this->username = $this->findUsername();
    }
 
    public function findUsername()
    {
        $login = request()->input('login');
 
        $fieldType = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
 
        request()->merge([$fieldType => $login]);
 
        return $fieldType;
    }
 
    public function username()
    {
        return $this->username;
    }
}

برای درک بهتر این کدها اجازه بدهید یک مقدار توضیحات بیشتر ارائه کنم. ابتدا ما یک ویژگی جدید به نام username در کلاس تعریف کردیم که در واقع فیلد ورودی مربوط به لاگین (ایمیل، نام کاربری یا شماره موبایل) را در خود ذخیره می کند. سپس در سازنده کلاس (constructor) یک متد به نام findUsername را فراخوانی کردیم.

در متد findUsername مقدار ورودی لاگین را (از طریق فرم) دریافت کرده و سپس بررسی می کنیم که آیا این اطلاعاتی که کاربر ارسال کرده مشابه ایمیل است یا نام کاربری (این کار را با تابع filter_var انجام داده ایم). برای بررسی شماره موبایل شما می توانید نام کاربری را برابر شماره موبایل قرار دهید.

سپس با استفاده از دستور merge فیلدهای موجود در متغییر fieldType را ادغام کرده و به درخواست request خود اضافه می کنیم. در نهایت این مقدار ادغام شده رابه متغییر username نسبت می دهیم (این متغییر در سازنده قبلا مقدار دهی شده بود)

به همین سادگی عملیات تغییر نام کاربری پیش فرض لاراول انجام می شود.