Изменить существующий модуль авторизации (адрес электронной почты для имени пользователя)
Я хотел бы изменить существующий модуль авторизации, предоставленный Laravel 5, вместо того, чтобы просить email
он попросит username
в базе данных.
- Как получить текущее название маршрута?
- В чем разница между очередью: work --daemon и queue: listen
- Ошибка миграции Laravel: ошибка синтаксиса или нарушение доступа: 1071 Указанный ключ был слишком длинным; максимальная длина ключа - 767 байт
- Класс 'Illuminate \ Html \ HtmlServiceProvider' не найден Laravel 5
- Как я могу выполнить миграцию в laravel 5.5?
- Может ли кто-нибудь объяснить Laravel 5.2 Multi Auth с примером
- Устойчивые сеансы по субдоменам в Laravel 5
- Laravel перенаправляет обратно с помощью () сообщения
Laravel ищет переменную $ username в файле:
Осветить \ Foundation \ Auth \ AuthenticatesUsers
public function loginUsername() { return property_exists($this, 'username') ? $this->username : 'email'; }
Как вы можете видеть, по умолчанию он будет называться «email».
Однако вы можете переопределить его в своем AuthController, добавив:
protected $username = 'username';
Вам не нужно модифицировать модуль Auth для этого, просто передайте идентификатор пользователя в попытке. Используйте имя поля в массиве попыток как таковое:
if (Auth::attempt(['username' => $username, 'password' => $password])) { return redirect()->intended('dashboard'); }
Вы можете попробовать проверить файл Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers
чтобы получить эту идею.
Затем добавьте переопределение postLogin
на свой AuthController
:
public function postLogin(Request $request) { $this->validate($request, [ 'username' => 'required', 'password' => 'required', ]); $credentials = $request->only('username', 'password'); if ($this->auth->attempt($credentials, $request->has('remember'))) { return redirect()->intended($this->redirectPath()); } return redirect($this->loginPath()) ->withInput($request->only('username', 'remember')) ->withErrors([ 'username' => 'These credentials do not match our records.', ]); }
Вам также нужно добавить use Illuminate\Http\Request;
для вашего AuthController
.
вы можете просто переопределить функцию имени пользователя auth из LoginController.php в laravel 5.3
public function username(){ return 'username'; }
в controllerах \ auth \ logincontroller добавьте это
protected $username = 'user_name';//user_name field name
затем перейдите в меню «Освежить \ Foundation \ Auth \ AuthenticatesUsers» и измените
public function username() { return 'email';//change this with "return $this->username;" }
с помощью этого метода. У вас может быть другой тип входа в другом controllerе, например, в других controllerах controllerа \ admin_auth \ logincontroller
protected $username = 'phone_number';