今日、私は自分のlaravelプロジェクトのデフォルト認証を変更しようとしました。Laravel 5.4、ユーザー名テーブルの列名を変更
まず、Composer(1.4.2)とLaravel(5.4.27)(すべての依存関係を意味する)は最新です。
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'
]);
});
ことの重要な部分は、私は「ログイン」の代わりに「名前を使いたいということです。
composer self-update
composer update
は、その後、私は移行経由でユーザーテーブルを変更した:私はこれを検証しました'次のように私がやった
次の事は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>
今私はh働いている認証、右か?私もそう思っていました。
ログイン自体は機能しますが、「ログイン」フィールドの値を読み込むと失敗します。
ログインの上で実行されます。クエリ:
デバッグ・バーには、次の私に言った正しく「ログイン」の以外のすべてのデータをロードしている
select * from `users` where `login` = 'admin' limit 1
。それは最終的にはデフォルトのホームを表示することになるといくつかの理由で、ビューに実行されたクエリは、この分野の滞在「0」
"user" => array:10 [
"id" => 1
"email" => "[email protected]"
"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 10のローカル開発環境として使用しています。私は、このXAMPPバージョンのMariaDBを、最新の安定版MariaDBバージョンを新しくダウンロードしたものに置き換えました。 (理由は、移行の事の誤差の)
私はまた、StackOverflowの上の認証の事の複数の投稿をチェックしLaracastsなどが、私を助けていたかもしれない任意のポストを見つけられませんでした。
https://laracasts.com/discuss/channels/laravel/change-name-column-to-username-in-auth
'protected $ primaryKey = 'login';'それを削除すると、** id ** **のようにプライマリキーがあります。同じことが 'getAuthIdentifierName()'メソッドと同じです。移行:すでに一部のユーザーが名前変更メソッドを使用している場合、ユーザーがいなくても開発中の場合は、新しい移行については忘れてデフォルトのものを変更してください。 – Kyslik
それは、ありがとう! :) – PolluX
@Kyslik答えとしてあなたのコメントを残す!そうすれば、この同じ質問を持つ人がもっと多く、より速く答えを見ることができます! – Jsleshem