2017-06-16 13 views
2

今日、私は自分の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

+2

'protected $ primaryKey = 'login';'それを削除すると、** id ** **のようにプライマリキーがあります。同じことが 'getAuthIdentifierName()'メソッドと同じです。移行:すでに一部のユーザーが名前変更メソッドを使用している場合、ユーザーがいなくても開発中の場合は、新しい移行については忘れてデフォルトのものを変更してください。 – Kyslik

+0

それは、ありがとう! :) – PolluX

+0

@Kyslik答えとしてあなたのコメントを残す!そうすれば、この同じ質問を持つ人がもっと多く、より速く答えを見ることができます! – Jsleshem

答えて

0

OPの回答。

コードprotected $primaryKey = 'login'getAuthIdentifierName()のコードを削除します。

コントローラのusername()メソッドをオーバーライドする(追加する)必要があります。


移行の注意とどのように右のそれを行うには:

  1. はいつもあなたが唯一の開発者ある場合がない
  2. 作成するためにマイグレーションを使用して、更新データベーススキーマ生産環境をに設定し、マイグレーションを修正してデータベースをリセット(すべてのテーブルを削除)+マイグレーション
  3. はあなたがチームあるOR 場合、運用環境があり、すでにを設定し、常に
  4. 新しい移行を作成すると、移行に関するLaravelの生みの親&友人から多くの

down()方法でいくつかの材料を気にしないでくださいこのポッドキャストではhttp://www.laravelpodcast.com/episodes/68236-episode-53-bigger-betterの約30分後に聞くことができます。

関連する問題