Вопрос:

Laravel Auth :: login ($ user) не работает должным образом

authentication laravel-5 laravel-5.2

2818 просмотра

1 ответ

61 Репутация автора

Я новичок в Laravel. Я пытаюсь войти в систему, но каждый раз получаю следующую ошибку:

ErrorException в строке 439 SessionGuard.php: аргумент 1, передаваемый в Illuminate \ Auth \ SessionGuard :: login (), должен быть экземпляром Illuminate \ Contracts \ Auth \ Authenticatable, заданный массив

Вот моя форма:

<form class="form-horizontal" method="post" action="{{ route('login') }}">
{{ csrf_field() }}
      <input type="email" class="form-control" name="email" id="email"><br>
      <input type="password" class="form-control" name="password" id="password"><br>
      <button type="submit" class="btn btn-default">Sign in</button>
</form>

и вот мой маршрут:

Route::post('login/', ['as' => 'login', 'uses' => 'UsersController@login']);

и метод входа в систему UsersController:

public function login(Request $request){
    $this->validate($request, ['email' => 'required|email', 'password' => 'required']);
    $user = $request->all();
    Auth::login($user);
    return redirect('/');
}

Спасибо за любую помощь

Автор: A. Apola Источник Размещён: 22.08.2016 09:43

Ответы (1)


1 плюс

9663 Репутация автора

Решение

Если вы хотите войти в систему пользователя, то вы хотите использовать, Auth::attempt()а не Auth::login().

Auth::attempt()принимает массив пар ключ / значение в качестве первого аргумента. Значения в массиве будут использоваться для поиска пользователя в таблице базы данных.

Так что в вашем коде это будет:

public function login(Request $request){
    $this->validate($request, ['email' => 'required|email', 'password' => 'required']);
    $user = $request->all();
    Auth::attempt($user);
    return redirect('/');
}

Вы будете использовать Auth::login()для входа в систему существующего пользователя вручную. Предоставленный объект должен быть реализацией, Illuminate\Contracts\Auth\Authenticatableкоторая уже реализована внутри App\Userмодели по умолчанию . Например, это может выглядеть так:

public function manualLogin(){
    $user = User::find(1);
    Auth::login($user);
    return redirect('/');
}

Вы можете прочитать больше об этом на документах, которые я связал выше.

Автор: James Размещён: 23.08.2016 01:50
Вопросы из категории :
32x32