Laravel: как я могу изменить имя поля Auth Password по умолчанию
В настоящее время я работаю над своим первым проектом laravel, и я столкнулся с проблемой.
Если у вас есть опыт работы с laravel, вы, вероятно, знаете, что, вызвав php artisan make:auth
, вы получите предопределенный механизм, который обрабатывает вход и регистрацию.
Этот механизм настроен на понимание нескольких часто используемых слов, чтобы автоматизировать всю процедуру.
Проблема, которая возникает в моем случае, заключается в том, что я использую oracle db, и это не позволит мне иметь столбец таблицы с именем password
, потому что это системное ключевое слово, и оно выдает ошибки при попытке вставить пользователя.
До сих пор я пытался изменить свой password
, и он работал в моей регистрационной форме, как и ожидалось. Строка пользователя была успешно вставлена, и моя страница была перенаправлена на /home.
Но когда я пытаюсь выйти из системы, а затем relogin, я получаю эту ошибку, сообщающую мне, что мои учетные данные неверны.
Что касается моего кода, я изменил свой passwd
так что он принимает имя пользователя вместо электронной почты
RegisterController.php
Пользователь $заполняемые
protected function validator(array $data)
{
return Validator::make($data, [
'username' => 'required|max:50|unique:ECON_USERS',
'passwd' => 'required|min:6|confirmed',
]);
}
protected function create(array $data)
{
return User::create([
'username' => $data['username'],
'passwd' => bcrypt($data['passwd'])
]);
}
Я предполагаю, что двиг пытается пройти проверку подлинности protected $fillable = [
'username', 'passwd'
];
, а не email
или авторизации поиск password
, а не password


Ответы - Laravel: как я могу изменить имя поля Auth Password по умолчанию / Laravel: How can i change the default Auth Password field name

07.09.2016 07:21:33
В app/Http/Controllers/Auth/LoginController
переопределить значение по умолчанию класса путем добавления:
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required', 'passwd' => 'required',
]);
}
Не забудьте добавить use Illuminate\Http\Request;
Это может быть вы должны добавить это тоже к вашему LoginController
.
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return $request->only($this->username(), 'passwd');
}
Это должно сработать.



08.09.2016 07:05:55
Для того, чтобы иметь username
пользователя вместо email
, вы можете перезаписать имя пользователя() в вашем LoginController.РНР
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'username';
}
И для passwd
вместо password
вы можете определить метод доступа в вашем приложении\User.РНР
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->passwd;
}
авторизоваться.лезвие.php: замените email
именем пользователя, но не меняйте имя ввода
password
.

getAuthPassword()
сработало! Спасибо :Д






public function getPasswordAttribute
и return $this->myCustomPasswordName
.

08.09.2016 07:15:59
В вашем AuthController.php (находится в app / http / Controllers / Auth)
public function postLogin(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required',
]);
$credentials = ($request->only('username', 'password'));
if ($this->auth->attempt($credentials)) {
//do something, credentials is correct!
}
return "Ops! snap! seems like you provide an invalid login credentials";
}

31.05.2017 05:20:40
Использовать это. Это работа для меня.
До сих пор я изменил пользователя.РНР
public function getAuthPassword(){
return $this->senha;
}
и
public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
Также на LoginController.РНР
public function username()
{
return 'usuario';
}


22.02.2019 01:21:38
В Laravel 5.7 рядом с вышеуказанным ответом вы должны изменить класс EloquentUserProvider. найдите в файле слово "пароль" в строках (107,117 и 140), вы нашли слово "пароль" и измените его на новое имя, и это все решение.
- В пользовательской модели добавьте этот метод :
public function getAuthPassword(){ return $this->new_password_name; }
- В LoginController добавьте это :
protected function validateLogin(Request $request){ $this->validate($request, [ $this->username() => 'required', 'new_password_name' => 'required', ]); } protected function credentials(Request $request) { return $request->only($this->username(), 'new_password_name'); } public function username() { return 'new_username';//or new email name if you changed }
- В логине.лезвие.php изменяет идентификатор и имя html-элемента.
- В классе EloquentUserProvider внутри
validateCredentials
иretrieveByCredentials
класс EloquentUserProvider, но если вы считаете, что изменение класса laravel является плохой практикой, вы можете создать пользовательский поставщик и переопределить функцииEloquentUserProvider
иvalidateCredentials
в пользовательском поставщике.

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


05.12.2019 05:57:33
Если вы используете последнюю версию. Я возвращаю его, как следующий код ниже для пользовательского поля пароля. С моей стороны, я использую люмен 6.x хотя это будет применяться и к текущей версии Laravel.
/**
* Get the custom password field for the user.
*
* @return string
*/
public function getAuthPassword()
{
return $this->custom_password_field_here;
}