Аутентификация Laravel 5.7

#php #laravel #laravel-authentication

#php #laravel #laravel-аутентификация

Вопрос:

Я новичок и изучаю laravel 5.7. Регистрация завершена, но возникли проблемы с аутентификацией при входе в систему, Auth::attempt всегда возвращает false

Я попытался использовать, Hash::check('plain-text','Hashed password) и это возвращает true, проблема в том, что Auth::attempt всегда возвращает false

UserController.php:

 // Registration code
public function register(Request $request){
       $request->validate([
            'firstName' => 'required',
            'lastName' => 'required',
            'username' => 'required|min:3',
            'password' => 'min:6|required_with:confirm_password|same:confirm_password',
            'confirm_password' => 'min:6'
        ]);

        Users::create([
            'firstName' => request('firstName'),
            'lastName' => request('lastName'),
            'username' => request('username'),
            'password' => Hash::make(request('password'))
        ]);
        notify()->success('Registered Successfully!');
        return redirect('/');

    }

// Login code
public function login(Request $request){

//      This returns true
//        if(Hash::check('123456','$2y$10$BrOg1JtnX7hAX05gbT9p0OZFQB9mFKtcz0m5Ks2rSHIN//B20dODgA.')){
//            return 'OK';
//        }


        $credentials = request([
            'username',
            'password'
        ]);


// Always returns false
        if(Auth::attempt($credentials)){
            notify()->success('Welcome!');
            return back();

        }else{
            notify()->warning('Credentials not found!');
            return back();
        }




    }
  

Users.php:

 //Model
class Users extends Model 
{
    //
    protected $guarded = [];


}
  

auth.php:

 'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppUsers::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
  

миграции:

  public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('username')->unique();
            $table->string('password');
            $table->string('firstName');
            $table->string('lastName');
            $table->rememberToken();
            $table->timestamps();
        });
    }
  

login.blade.php:

 <form action="/" method="post" autocomplete="on">
                        @csrf
                        <h1>Log in</h1>
                        <p>
                            <label for="Username"  data-icon="u"> Username</label>
                            <input id="Username" name="username" required="required" type="text" placeholder=""/>
                        </p>
                        <p>
                            <label for="Password"  data-icon="p"> Password </label>
                            <input id="Password" name="password" required="required" type="password" placeholder=""/>
                        </p>
                        <p class="login button">
                            <input type="submit" value="Login"/>
                        </p>
                        <p class="change_link">
                            Not a member yet ?
                            <a href="/register" class="to_register">Join us</a>
                        </p>
                    </form>
  

ПРИМЕЧАНИЕ

Я уверен, что получаю правильные входные данные

 // Returns correct information
{
"username": "yeah",
"password": "123456"
}

  

Комментарии:

1. У вас есть функциональность аутентификации «из коробки». Вам не нужно их переписывать 🙂 Проверьте внутри AppHttpControllersAuth; , дайте мне знать, если вам понадобится дополнительная помощь

2. Спасибо, я проверю это ^_^

Ответ №1:

Вам не нужно пытаться переписывать функциональность входа (ни регистрироваться), поскольку они доступны в Laravel «из коробки». Что вам нужно сделать, это:

Сначала в вашем login.blade.php

 <form action="/login" method="post" autocomplete="on">
  

Затем в вашем web.php

 Route::post('login', 'AuthLoginController@login');
  

Теперь перейдите к вашему AppHttpAuthLoginController

 // Add this function to overwrite default email to username
public function username()
{
    return 'username';
}
  

Комментарии:

1. Я применил то, что вы сказали, после входа в систему он просто перенаправляет на страницу входа, я не уверен, прошла ли аутентификация успешно, можно ли как-нибудь узнать, была ли она успешной или неудачной? как в console.log() ^^

2. dd(Auth::user()) dd() это как console.log в Laravel. Я бы сказал, попробуйте немного поучиться, прежде чем двигаться вперед 🙂

Ответ №2:

Laravel использует email по умолчанию для авторизации пользователя, поэтому попробуйте переопределить поле, которое вы используете в своем LoginController добавлении этого:

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

Комментарии:

1. Спасибо, извините, я немного новичок, должен ли я поместить это в UserController.php или на User.php (Модель)?

2. @CaTzNeko вы можете просто повторно использовать функциональность аутентификации по умолчанию.