Laravel 5.4, переименование столбца таблицы пользователей

Поэтому сегодня я попытался изменить значение по умолчанию в моем проекте laravel.

Прежде всего: Composer (1.4.2) и Laravel (5.4.27) (что означает также все зависимости) обновлены. Я проверил это с помощью:

composer self-update composer update 

Затем я изменил таблицу пользователей с помощью миграции:

 Schema::table('users', function (Blueprint $users){ $users->string('login', 16)->unique()->after('id'); $users->string('real_name', 32)->after('email'); }); Schema::table('users', function(Blueprint $users){ $users->dropColumn([ 'name' ]); }); 

Важной частью этого является то, что я хочу использовать «login» вместо «name».

Следующее, что я сделал, это изменить класс User следующим образом:

 protected $fillable = [ 'login', 'email', 'real_name', 'password' ]; protected $primaryKey = 'login'; public function getAuthIdentifierName() { return 'login'; } 

А также LoginController:

 public function username() { return 'login'; } protected function validateLogin(Request $request) { $this->validate($request, [ $this->username() => 'required|string', 'password' => 'required|string', 'g-recaptcha-response' => 'required|captcha' ]); } 

Наконец, я изменил вид входа в систему:

 <div class="form-group{{ $errors->has('login') ? ' has-error' : '' }}"> <label for="login" class="col-md-4 control-label">Login</label> <div class="col-md-6"> <input id="login" type="text" class="form-control" name="login" value="{{ old('login') }}" required autofocus> @if ($errors->has('login')) <span class="help-block"> <strong>{{ $errors->first('login') }}</strong> </span> @endif </div> </div> 

Теперь у меня должна быть рабочая проверка подлинности, не так ли? Это то, о чем я думал.

Авторизация сама по себе работает, но когда дело доходит до считывания значения поля «login», это терпит неудачу – или что-то вроде этого.

debug-bar сказал мне следующее:

Запрос, который будет выполняться при входе в систему:

 select * from `users` where `login` = 'admin' limit 1 

Которая загружает все данные правильно, кроме «входа». По какой-то причине это поле остается «0» (в auth web)

 "user" => array:10 [ "id" => 1 "email" => "email@email.com" "created_at" => "2017-06-16 03:08:43" "updated_at" => "2017-06-16 03:08:43" "login" => 0 "real_name" => "PolluX" 

И когда он наконец дойдет до отображения стандартного домашнего представления, выполненный запрос:

 select * from `users` where `login` = '0' limit 1 

Я использую XAMPP v3.2.2, PHP 7.1.1 и 10.2.6-MariaDB как локальную среду для Windows в Windows 10. Я должен упомянуть, что я заменил по умолчанию MariaDB этой версии XAMPP новой загрузкой последней стабильной Версия MariaDB. (из-за ошибки миграции)


Я также проверил несколько сообщений в файле auth на StackOverflow, Laracasts и т. Д., Но не нашел сообщений, которые могли бы мне помочь.

например https://laracasts.com/discuss/channels/laravel/change-name-column-to-username-in-auth

Ответ для OP.

Удалите protected $primaryKey = 'login' код protected $primaryKey = 'login' и getAuthIdentifierName() .

Все, что вам нужно сделать, это переопределить (добавить) username() в контроллере.


Примечание для миграции и как это сделать правильно:

  1. всегда использовать миграции для создания и обновления схемы базы данных
  2. если вы являетесь одиноким разработчиком. И нет установленной производственной среды , просто измените миграцию и выполните сброс базы данных (удалите все таблицы) + выполните миграцию
  3. если вы являетесь командой или уже создана производственная среда , всегда создавайте новую миграцию
  4. не беспокойтесь о том, что метод down()

Некоторые материалы от создателя и друзей Laravel относительно миграции можно услышать в этом подкасте http://www.laravelpodcast.com/episodes/68236-episode-53-bigger-better около 30-минутной отметки.