مشکل احراز هویت با شماره موبایل

- 1 هفته پیش
توسط eMBi آپدیت شد
eMBi ( 2060 تجربه )
1 هفته پیش

سلام
من از کد زیر برای احراز هویت استفاده میکنم

public function login(Request $request) {

        if (Auth::attempt(['phone_number' => $request->phone_number, 'password' => $request->password])){
            return 'logged in';
        }else return 'login failed';

    }

اما در هر صورت login failed رو در خروجی دارم!

از کنترلر خود لاراول نمیخوام استفاده کنم و متد و توی یوزرکنترل قرار دادم
با یوزرنیم و ایمیل هم که تست میکنم همین مشکل هست
در واقع متد attempt همیشه false رو برمیگردونه

بهترین پاسخ انتخاب شده توسط eMBi
eMBi
1 هفته پیش

توی مدل یوزر از کلاس Illuminate\Foundation\Auth\User ارث بردم و مشکل برطرف شد.

شاید برای سایر دوستان هم پیش بیاد :)

علی بیات ( 48117 تجربه )
1 هفته پیش

@bahadori.embi

فایل زیر رو باز کنید:
vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php

داخلش یه متد به نام ()username هست. به حالت زیر تغییرش بدید و دوباره امتحان کنید.

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

همچنین داخل متد ()validateLogin هم چک میشه که آرگومان اول یه رشته باشه٬ که برای شماره تلفن یه مقدار عددی باید باشه.

    protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => 'required|string',
            'password' => 'required|string',
        ]);

    }

required|string اولی رو میتونید به required|integer یا required خالی تغییر بدید.

eMBi ( 2060 تجربه )
1 هفته پیش

@ali.bayat

ممنونم اما مشکل رفع نشد!
حتی بصورت پیشفرض با یوزرنیم هم تست میکنم همون خروجی رو دارم

if (Auth::validate(['username' => 'mohammad' , 'password' => '654321'])){
            return 'logged in';
        }else return 'login failed';

این کد هم فقط خروجی login failed رو داره

من برای تست اسم key پسورد رو تغییر دادم، که ببینم چه کوئری داره میزنه نتیجه به این شکل هست:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'passsword' in 'where clause' (SQL: select * from `users` where `username` = mohammad and `passsword` = 654321 limit 1)"

اگه دقت کنید مقدار نام کاربری mohammad و پسورد 654321 داخل کتیشن نیست، و کلا در حالت عادی هم نمیشه اینجوری کوئری گرفت و باید داخل کوتیشن یا دبل کوتیشن باشه

علی بیات ( 48117 تجربه )
1 هفته پیش

@bahadori.embi
احتمالا باید متد credentials رو در LoginController بازنویسی کنید.
لینک های زیر رو چک کنید.
https://medium.com/@jagadeshanh/laravel-5-4-login-with-email-or-phone-cac9a3855cda
https://stackoverflow.com/questions/47537191/laravel-login-with-username-email-or-phone

eMBi ( 2060 تجربه )
1 هفته پیش

توی مدل یوزر از کلاس Illuminate\Foundation\Auth\User ارث بردم و مشکل برطرف شد.

شاید برای سایر دوستان هم پیش بیاد :)

برای ارسال پاسخ باید وارد سایت شوید