Я хотел бы изменить существующий модуль авторизации, предоставленный Laravel 5, вместо того, чтобы запрашивать email, он будет запрашивать поле username в базе данных.
Вопрос
Изменить существующий модуль авторизации (отправить электронное письмо на имя пользователя)
Ответы
Ответ 1 · рейтинг 35 · Alexandre Chopin
Laravel ищет переменную $username в файле:
Иллюминате\Фаундейшн\Аут\Аусентикатесусерс
public function loginUsername() {
return property_exists($this, 'username') ? $this->username : 'email';
}
Как видите, по умолчанию он будет называться "электронная почта".
Однако вы можете переопределить его в своем AuthController, добавив:
protected $username = 'username';
Ответ 2 · рейтинг 5 · Joe
Вам не нужно модифицировать модуль Auth, чтобы сделать это, просто передайте идентификатор пользователя при попытке. Используйте имя поля в массиве попыток как таковое:
if (Auth::attempt(['username' => $username, 'password' => $password]))
{
return redirect()->intended('dashboard');
}
Ответ 3 · рейтинг 5 · majidarif
Вы можете попробовать проверить файл 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.
Ответ 4 · рейтинг 5 · Irakli Dgebuadze
вы можете просто переопределить функцию имени пользователя auth из LoginController.php в laravel 5.3
public function username(){
return 'username';
}
Ответ 5 · hamid Reza Kamali
в controllers\auth\logincontroller добавьте это
protected $username = 'user_name';//user_name field name
затем перейдите в Illuminate\Foundation\Auth\AuthenticatesUsers и измените
public function username()
{
return 'email';//change this with "return $this->username;"
}
с помощью этого метода у вас может быть другой тип входа в другой контроллер, например, в другом контроллере controllers\admin_auth\logincontroller
protected $username = 'phone_number';
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Как работать с личными изображениями в laravel 5?
- Используя Laravel 4, как мне пометить переключатель как проверенный, если ключ сеанса является указанным
- Семя Laravel после миграции
- Как изменить встроенную систему аутентификации Laravel 5?
- Laravel 5 на виртуальном хостинге - неправильный public_path ()
- Вспомогательные функции не загружают laravel 5 - вызов неопределенной функции