#laravel #custom-authentication #laravel-authentication
#laravel #пользовательская аутентификация #laravel-аутентификация
Вопрос:
Ошибка Laravel при изменении email
поля из базы данных на user_email
Исключение Illuminate Database QueryException SQLSTATE[42S22]: столбец не найден: 1054 неизвестных столбца ’email’ в предложении ‘where’ (SQL: выберите * из
ns_users
where
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)