Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Изменить существующий модуль авторизации (отправить электронное письмо на имя пользователя)

Автор вопроса: Rene PadilloОтветов: 5

Я хотел бы изменить существующий модуль авторизации, предоставленный Laravel 5, вместо того, чтобы запрашивать email, он будет запрашивать поле username в базе данных.

laravellaravel-5

Ответы

Ответ 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.

Похожие материалы