Поэтому сегодня я попытался изменить значение по умолчанию в моем проекте 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()
в контроллере.
Примечание для миграции и как это сделать правильно:
down()
Некоторые материалы от создателя и друзей Laravel относительно миграции можно услышать в этом подкасте http://www.laravelpodcast.com/episodes/68236-episode-53-bigger-better около 30-минутной отметки.