Laravel: как я могу изменить имя поля Auth Password по умолчанию

Laravel: как я могу изменить имя поля Auth Password по умолчанию

07.09.2016 06:55:10 Просмотров 40 Источник

В настоящее время я работаю над своим первым проектом laravel, и я столкнулся с проблемой.

Если у вас есть опыт работы с laravel, вы, вероятно, знаете, что, вызвав php artisan make:auth, вы получите предопределенный механизм, который обрабатывает вход и регистрацию.

Этот механизм настроен на понимание нескольких часто используемых слов, чтобы автоматизировать всю процедуру.

Проблема, которая возникает в моем случае, заключается в том, что я использую oracle db, и это не позволит мне иметь столбец таблицы с именем password, потому что это системное ключевое слово, и оно выдает ошибки при попытке вставить пользователя.

До сих пор я пытался изменить свой password, и он работал в моей регистрационной форме, как и ожидалось. Строка пользователя была успешно вставлена, и моя страница была перенаправлена на /home. Register

Success

Но когда я пытаюсь выйти из системы, а затем relogin, я получаю эту ошибку, сообщающую мне, что мои учетные данные неверны. enter image description here

Что касается моего кода, я изменил свой 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

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name#comment78067975_39374472
Подобные проблемы не позволяют мне предлагать Laravel 5.4 для нового проекта. Я борюсь с той же проблемой. Хотя в моем случае я изменил имя таблицы и имя поля пароля и должен добавить кучу других полей в пользовательскую таблицу пользователя. Не знаю, как заставить logincontroller снова работать, используя модель eloquant для пользователя и драйвера.
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name#comment78696795_39374472
У меня такая же проблема, как я могу ее решить?

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

Dimitri Mostrey

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');
    }

Это должно сработать.

https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39375007#comment66084629_39375007
У меня было хорошее чувство об этом, но я все еще получаю неправильные учетные данные :/ есть ли способ, которым я могу войти в это? чтобы продолжить поиск проблемы?
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39375007#comment78067817_39375007
Извините, я только что протестировал его, и эти изменения не работают в Laravel5. 4.
Является ответом!
Gaurav

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.

https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment66099172_39382427
getAuthPassword()сработало! Спасибо :Д
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment66101117_39382427
@D. Intziadis я надеюсь, что имя пользователя сработало так же. Я не проверял эту часть сам.
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment78068158_39382427
LoginController по-прежнему не работает в Laravel5.4 после изменения модели пользователя в соответствии с ответом ниже. Я вижу то же сообщение об ошибке при входе в систему, как указано выше. Регистрация пользователя работала, хотя.
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment78126905_39382427
@Энди вы также изменили столбец пароля?
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment78158890_39382427
@Гаурав да. Я также изменил имя таблицы, столбец первичного ключа и имя столбца пароля, и на самом деле у меня больше столбцов в моей пользовательской таблице, чем базовая таблица пользователей по умолчанию, используемая в Laravel5.4.
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment78212934_39382427
@Энди я думаю, что имя столбца пароля не может быть изменено, поскольку это имя используется статически в коде платформы для проверки учетных данных.
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/39382427#comment86244447_39382427
Для 5.4 вы можете добавить метод доступа для пароля и вернуть имя настраиваемого поля. public function getPasswordAttributeи return $this->myCustomPasswordName.
Juliver Galleto

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";

}
Fernando Aires

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';
}
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/44287309#comment97409681_44287309
Почему вы называете осуществляется? Значение уже должно быть зашифровано
Niyaz

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в пользовательском поставщике.

https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/54817143#comment96410653_54817143
Вы никогда не должны обновлять файлы в каталоге поставщика. Так что обновление EloquentUserProviderнапрямую-это очень плохая практика. Не делай этого. Вместо этого создайте новый класс, который расширяет пользовательский поставщик, переопределите методы, которые вам нужны, а затем зарегистрируйте новый класс, чтобы заменить EloquentUserProvider
https://stackoverflow.com/questions/39374472/laravel-how-can-i-change-the-default-auth-password-field-name/54817143#comment97573630_54817143
99% времени вы не должны менять коды поставщиков. Но в некоторых редких случаях вы можете. Вам просто нужно настроить автоматический способ изменить его при развертывании. Я помню, что у меня было 2 проблемы с кодами Laravel 5.0 и пакетом резервного копирования DB, который исправил ошибки только в Laravel 5.1+. Поэтому вместо того, чтобы потерять все время обновления до 5.1 и после 5.7, я просто взломал его. И позже я обновился до 5.7, ошибки больше не существовали. Так что спасибо вам обоим за указание ответственного метода и расширение и переопределение вместо этого. И некоторый ограниченный доступ к серверу с ftp не конфликтует с хакерством поставщика
alvirbismonte

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;
}
Закрыть X