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

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


person Rene Padillo    schedule 18.02.2015    source источник


Ответы (5)


Laravel ищет переменную $username в файле:

Иллюминате\Фаундейшн\Аут\Аусентикатесусерс

public function loginUsername() {
    return property_exists($this, 'username') ? $this->username : 'email';
}

Как видите, по умолчанию он будет называться «электронная почта».

Однако вы можете переопределить его в своем AuthController, добавив:

protected $username = 'username';
person Alexandre Chopin    schedule 13.07.2015
comment
Сэр, я искал этот ответ весь день. Как вы узнали, что можете установить свойство $username? Спасибо, кстати. Это именно то, что мне нужно. - person IIllIIll; 05.11.2015
comment
Привет. Что такое $username и что такое «имя пользователя»? У меня есть имя в столбце БД, которое я хотел бы использовать для аутентификации. Должен ли я использовать protected $username = 'name'; ? Потому что у меня это не работает :( Laravel 5.3 - person Mego; 20.10.2016
comment
Сейчас работает... Вам также необходимо обновить view-›login.blade.php. Вам нужно изменить входное имя с электронной почты на имя пользователя. - person Mego; 20.10.2016

Вам не нужно модифицировать модуль Auth, чтобы сделать это, просто передайте идентификатор пользователя при попытке. Используйте имя поля в массиве попыток как таковое:

if (Auth::attempt(['username' => $username, 'password' => $password]))
    {
        return redirect()->intended('dashboard');
    }
person Joe    schedule 18.02.2015
comment
Да, я так и сделал, но меня также беспокоит, как я могу всегда проверять сеанс пользователя, как это делает модуль аутентификации по умолчанию? public function __construct() { $this->middleware('auth'); } - person Rene Padillo; 18.02.2015
comment
Используемый идентификатор никак не влияет на работу модуля Auth. - person Joe; 18.02.2015
comment
извините, но я не могу найти массив попыток или шаблон Auth::attempt( нигде в моем проекте. Может ли кто-нибудь просто сказать, где что изменить, чтобы все заработало? спасибо!! - person sgohl; 31.05.2015
comment
как войти, используя и логин, и пароль? - person MaXi32; 04.09.2015

Вы можете попробовать проверить файл 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.

person majidarif    schedule 19.02.2015
comment
Вам также потребуется обновить app/Services/Registrar.php для регистрации. Это требует электронной почты и помещает в базу данных. Также при простой аутентификации вам потребуется обновить views/auth имен форм. Я думаю, это все. - person ; 12.03.2015
comment
Большое спасибо, спас мой день! - person Bhargav Nanekalva; 17.05.2015

вы можете просто переопределить функцию имени пользователя auth из LoginController.php в laravel 5.3

public function username(){ 
   return 'username';
}
person Irakli Dgebuadze    schedule 29.11.2016

в 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';
person hamid Reza Kamali    schedule 27.11.2016