Я пытаюсь перенести старый проект PHP/MySQL в Laravel. По многим причинам я не должен изменять схему таблицы базы данных. Мне нужно изменить классы фреймворка Laravel. Например, я хочу заставить Laravel Auth проверять столбец users.USER, чтобы вернуть пользователя, а не users.user. Мне нужно знать, какая часть фреймворка Laravel проверяет users таблицу базы данных или user столбец. Как изменить без перерыва функциональность аутентификации по умолчанию.
Более конкретно: я хочу знать, как Laravel извлекает данные из базы данных в /Vendor/laravel/framework/src/illuminate/Auth/EloquentUserProvider.php строке 137 validateCredentials().
Вы также можете использовать пользовательскую модель для аутентификации, то есть таблицу, отличную от users. Подробнее см. в сообщении это.
если ваша текущая схема таблицы имеет основные столбцы, т. е. имя, пароль, адрес электронной почты; затем в таблице Users вы можете просто указать свойство таблицы, передав туда имя таблицы, и laravel автоматически выберет это
@john Моя цель — заставить Laravel Auth использовать мой столбец users.USER вместо проверки таблицы users.user. Я не хочу менять схему таблицы.






Вам нужно будет создать все модели для таблицы и отношений. В моделях вы можете указать имя таблицы, вам не нужно переименовывать таблицы, если вы этого не хотите.
Например.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model{
protected $table = 'users.USER';
}
Вопрос/ответ, связанный с базой данных:
Для извлечения моделей из схемы базы данных вы можете использовать следующий пакет:
Этот пакет позволяет автоматически генерировать модели Eloquent, необходимые для начала работы с вашей базой данных в Laravel.
Он имеет множество простых в использовании команд, позволяющих создавать модели из вашей схемы базы данных.
использование
Давайте создадим некоторые из ваших моделей из вашего соединения по умолчанию.
php artisan code:models
Вы можете построить конкретную таблицу следующим образом:
php artisan code:models --table=users
Вы также можете указать соединение:
php artisan code:models --connection=mysql
Если вы используете базу данных MySQL, вы можете указать, какую схему вы хотите создать:
php artisan code:models --schema=shop
Расширение/редактирование функций аутентификации
Взгляните на официальную документацию по ручная аутентификация.
Если вы поместите следующий фрагмент в свой контроллер:
public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Authentication passed...
return redirect()->intended('dashboard');
}
}
Если вам нужно указать, какие свойства использовать, вы можете использовать следующее:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
Вы также можете просто выполнить собственную проверку, а затем войти в свой код напрямую, используя следующий код:
Auth::login($user);
// Login and "remember" the given user...
Auth::login($user, true);
Все, что я перечислил здесь, находится в ссылке выше об аутентификации пользователей.
Если вы хотите использовать свою пользовательскую базу данных в своем приложении laravel, вам просто нужно создать модель для каждой из таблиц вашей базы данных и настроить имя таблицы, первичный ключ и заполняемые атрибуты.
Подробнее здесь Определение моделей
Если вы запустили команду php artisan make:auth, но хотите использовать другую таблицу или поля вместо пользователя по умолчанию и пройти без нарушения созданной функции аутентификации, вы должны сделать так, чтобы laravel узнал об этом, выполнив шаги, перечисленные ниже:
Первый: Создайте модель для таблицы, которую вы хотите использовать для аутентификации. Для этого выполните команду php artisan make:model FooUserTable, где «FooUser» — имя вашей таблицы.
Затем вы должны установить в модели имя вашей таблицы, первичный ключ и заполняемые поля, как показано ниже:
class FooUser extends Authenticatable{
protected $table = 'FooUser';
protected $primaryKey = 'foo_id_user'; // Place here the name of the id of your table
protected $fillable = [ // Insert here all the fillable fields of your users table
'field1',
'field2',
...
];
}
Обратите внимание, что модель теперь расширяется от Authenticatable, а не от модели, которая является псевдонимом для класса Illuminate\Foundation\Auth\User. Чтобы это заработало, просто поставьте use Illuminate\Foundation\Auth\User as Authenticatable вверху файла.
Это важно!:
Чтобы использовать другое имя поля для пароля, поместите функцию getAuthPassword в модель для вашей таблицы пользователей, как показано ниже:
public function getAuthPassword(){
return $this->myPasswordField; // myPasswordField is the field on your users table for password
}
Теперь у вас есть вся ваша модель, готовая к следующему шагу.
Второй: В файле config > auth.php вам нужно найти массив провайдеров и изменить значение свойства модели на имя класса вашей модели, например:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\FooUser::class, // Place here the name of your model
],
],
Все готово для следующего шага.
Третий: Теперь вам нужно найти контроллер для Laravel Auth по умолчанию, расположенный в app > http > controllers > auth > LoginController.php, и в класс, вам нужно только добавить функцию с именем username, которая возвращает имя пользователя, которое будет использоваться для действия аутентификации, как показано ниже:
class LoginController extends Controller{
..... // don't change other functions
public function username(){ // add the function username
return 'YourUsernameField';
}
}
Примечание к шаблону входа в Blade: В шаблоне блейда входа в систему вы должны изменить имя ввода имени пользователя на новое, а имя поля пароля должно быть по-прежнему password, потому что laravel использует его для проверки, но внутри он будет использовать ваше пользовательское имя поля пароля.
И это все. Я надеюсь, это поможет вам.
Примечание: Никогда не редактируйте файлы в папке поставщика!
Подробнее читайте в документации по разделу Ручная аутентификация пользователей
Все это тестировалось на версиях Laravel 5.4 и 5.7.
Я лично думаю, что это излишество по сравнению с тем, чего он пытается достичь. Но это очень хорошо структурированный и подробный ответ. Это также больше ответ на вопрос о том, как правильно расширяться.
Почему бы вам не написать скрипты миграции? например, вы можете перенести столбец
users.USERвusers.userв своем скрипте миграции.