پوریا مستعان
4 سال پیش توسط پوریا مستعان مطرح شد
21 پاسخ

تغییر فیلد ایمیل به نام کاربری در لاراول

سلام خدمت همه دوستان.
به خاطر پروژه ای که داریم مجبورم تا به جای ثبت ایمیل، فقط نام کاربری کاربر رو ثبت کنم.
برای این کار خب توی RegisterController تو جاهایی که ایمیل میگرفت رو درست کردم و تغییرش دادم به نام کاربری و ثبت نام هم بدون هیچ مشکلی انجام میشه، اما بعد از ثبت نام وقتی که میخوام لاگین کنم، این ارور رو توی blade لاراول به نشون میده که اطلاعات وارد شده با اطلاعات ما سازگار نیست، بعد از اینکه یکم سرچ کردم فهمیدم که باید متد username از تریت AuthenticatesUsers در LoginController رو به شکل زیر بازنویسی کنم و username رو توش قرار بدم :

public function username()
    {
        return 'username';
    }

و input مربوط به ایمیل هم نامش رو به username تغییر دادم، اما هرکار میکنم نمیتونم لاگین کنم و هی میگه اطلاعات وارد شده سازگار نیست در صورتی که چندین و چندبار تکرار کردم و مقادیر رو سنجیدم و از اول کاربر ساختم اما نشد.
ممنون میشم اگر کسی میدونه مشکل کجاست راهنمایی کنه

به روز رسانی

class LoginController extends Controller
{

    use AuthenticatesUsers, TwoFactorAuth;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    /**
     * Get the login username to be used by the controller.
     *
     * @return string
     */
    public function username()
    {
        return 'username';
    }

    protected function authenticated(Request $request, $user)
    {
        return $this->loggedin($request, $user);
    }

    public function logout(Request $request)
    {
        Auth::logout();
        return redirect('/');
    }
}

ثبت پرسش جدید
MB
تخصص : برنامه نویس
@mohammadbashiri8683s 4 سال پیش مطرح شد
0

سلام
چند وقت پیش این مشکل هم برای من پیش امد
این مشکل برای من به خاطر اینبود که پسورد من دو بار hash میشد و موقعی که از attempt استفاده میکردم تنها یکی از اون مرحله هش شده با پسورد وارد شده مقایسه میشد و با هم سازگار نبودن .
دو بار hash شدن پسورد هم به خاطر این بود که من یه بار از مدل user و یه بار هم مودقع ایجاد user در کنترلر این کارو میکردم


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

سلام کاری برای انجام نمونده شاید شاید نام کاربری رو اشتباه وارد میکنید یا رمز عبورتان اشتباه تایپ میشود.


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@hosseinshirinegad98
همونطور که گفتم تو متن بار ها و بار ها تست کردم، دیتابیس کنارم بازه دیگه :)))
از لحاظ اینکه اشتباه وارد میکنم امکان نداره 100 درصد مطمئنم که درسته، نمیدونم واقعا کجاش مشکل داره که لاگین نمیکنه


محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش مطرح شد
0

سلام.رمز عبور رو باید bcrypt کنید حتما وگرنه امکان لاگین وجود نداره. از تابع attempt استفاده کنید برای لاگین کردن.


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@mohammadeng3731
یعنی موقع ثبت نام ؟!
خب تو ثبت نام خود لاراول داره از Hash::make استفاده میکنه که !


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

یه کاری انجام بدین قدم به قدم با dd از برنامه در متد لاگین خروجی بگیرین ببین به متد لاگین چه مقادیری ارسال میشه.


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@hosseinshirinegad98
دقیقا همین کارم کردم، و دقیقا همین 2 تا فلید نام کاربری و رمز عبور رو به شکل زیر بهم بر میگردونه :

array:3 [▼
   "_token" => "v2lKcL3A1EUfsTKLpfKIuKMsldlT4eWkdSkTaDwQ"
   "username" => "pooriya_mtn"
   "password" => "123456789"
 ]

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

خوب ادامه بدین همین طور دنبال کنین بعد ولیدیت کردن هم خروجی بگیرین قبل و بعد متد attempt هم خروجی بگیرین


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

در مدل User هم فیلد جدیدو معرفی باید کرد اگر کردی که هیچ نکردی تعریف کن.


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@hosseinshirinegad98
تعریف کردم از قبل، واقعا دیگه نمیدونم مشکل از چی میتونه باشه هر جا هم تونستم پرسیدم کسی نمیدونه 😑😑


وحید حسنی
تخصص : برنامه نویس وب
@vah.id 4 سال پیش مطرح شد
0

سلام وقت بخیر
ظاهرا شما کارا رو دارید درست انجام میدید ولی ممکنه جایی خطای سینتکسی داشته باشید. حتما از تابع attemp برای ورود dd بگیرید و ببینید چه مقداری را برمیگرداند. دوس داشتی لینک زیر رو هم یه مطالعه بکن شاید بدردت بخوره
https://7learn.com/tutorials/laravel-validation-and-logon-by-email-or-usernam-in-a-field


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

من تونستم راحت با username لاگین کنم فقط در LoginController متد username رو باز نویسی کردم و ویوهای login و register رو با فیلد جدید ادیت کردم RegisterCnotroller رو هم مثل خودت ادیت کردم و الان با موفقیت رجیستر و لاگین میکنه . مشکل خاصی نباید تو برنامت باشه.


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@vah.id
درود
از تابع attemptLogin خروجی گرفتم دقیقا درست بود و مقدار username و password رو بر میگردوند.
حتی از تابع credentials که توی همین attemptLogin قرار داره هم خروجی گرفتم و باز هم درست بود و مقادیر رو بر میگردوند


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@hosseinshirinegad98
چی بگم والا، 2 روزه اسیر کرده منو هرکیم میگیم مثل شما درست کار میکنه واسش، نمیدونم دیگه کجا میتونه باشه مشکل


وحید حسنی
تخصص : برنامه نویس وب
@vah.id 4 سال پیش مطرح شد
1

@Waltun
بنظرم از قسمت لاگین هم کدتون رو بزارید...ممکنه جایی اشتباه شده باشه
اینو داشته باش که همیشه دقیقا اونموقعی که فک میکنی هیچ خطایی نداری یه خطایی وجود داره خخخخ (تجربه)


پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@vah.id
گفت و گو ویرایش شد


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

این رو برای چی به این صورت نوشتین؟

protected function authenticated(Request $request, $user)
    {
        return $this->loggedin($request, $user);
    }

پوریا مستعان
تخصص : Full-Stack Developer
@pooriya.mostaan 4 سال پیش مطرح شد
0

@hosseinshirinegad98
این تابع authenticated دقیقا بعد از ورود اجرا میشه که خب الان من ورودم انجام نمیشه که بخواد اجرا بشه
ولی در کل احراز هویت دو مرحله ای کاربر رو چک میکنه که ببینه فعال هست یا نه، به ورود اصلا کاری نداره بخواد مشکل ایجاد کنه، چون حتی کامنتش کردم و تست کردم باز هم نشد


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

احتمال 99 درصد کدهای احراز هویت دو مرحله ای داره مشکل ایجاد میکنه البته حدسم اینه.


وحید حسنی
تخصص : برنامه نویس وب
@vah.id 4 سال پیش مطرح شد
0

@Waltun
لینکی که براتون فرستادم رو مطالعه کنید شاید کارتون راه افتاد
البته شما احراز هویت دو مرحله ای رو هم استفاده میکنید ممکنه توی اون هم باید فیلد رو تغییر بدین


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

تو LoginController این تریتو هم حذفش کن بعد تست کن.
TwoFactorAuth
اینو هم کامنت کن.

return $this->loggedin($request, $user);

و اگر مایلی پروژتو تو تلگرام بدون پوشه vendor و node_module زیپ کن برام به ای ایدی بفرست

@hossein_shirinegad

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام