Измените поле электронной почты Laravel authentificaton по умолчанию на user_email

#laravel #custom-authentication #laravel-authentication

#laravel #пользовательская аутентификация #laravel-аутентификация

Вопрос:

Ошибка Laravel при изменении email поля из базы данных на user_email

Исключение Illuminate Database QueryException SQLSTATE[42S22]: столбец не найден: 1054 неизвестных столбца ’email’ в предложении ‘where’ (SQL: выберите * из ns_users where email = admin@yahoo.com ограничение 1)

 Schema::create('ns_users', function (Blueprint $table) {
        $table->increments('user_id');
        $table->boolean('active')->default(0);/*by default the user is not active*/
        $table->integer('role')->default(0);/* role 0 means user and role 1 means admin!! */
        $table->string('name');
        $table->string('user_email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
});
  

Кто-нибудь знает, что я должен изменить в аутентификации по умолчанию, чтобы работать с user_email полем вместо email ?

Комментарии:

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

2. просмотрите этот файл, vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php здесь вы можете найти username() функцию, просто скопируйте это и вставьте в свой контроллер авторизации в соответствии с версией laravel, это может быть контроллер аутентификации или контроллер входа в систему. public function username() { return 'email'; } вставьте в него этот код и измените возвращаемое значение на user_email .

Ответ №1:

По умолчанию Laravel использует email поле для аутентификации. Если вы хотите настроить это, вы можете определить username метод на своем LoginController компьютере.:

 public function username()
{
    return 'user_email';
}
  

Ответ №2:

 public function getEmailAttribute()
    {
        return $this->user_email;
    }
  

работает для меня

Комментарии:

1. возможно, вы захотите упомянуть, что вы делаете это в User.php модель

Ответ №3:

На случай, если кто-либо из вас вручную обрабатывает аутентификацию laravel, используя метод attempt. Все, что вам нужно сделать, это изменить имя ключа ’email’ на желаемое в ассоциативном массиве, который вы передаете методу attempt.

 Auth::attempt(['user_email' => $email, 'password' => $password], $remember)