2017-06-16 57 views
2

所以今天我試着在我的laravel項目中修改默認的auth。首先:Composer(1.4.2)和Laravel(5.4.27)(也意味着所有的依賴關係)是最新的。我證實了這一具有:Laravel 5.4,重命名用戶表列

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 

然後,我通過遷移改變了用戶表」。

我做下一件事是修改用戶類,如下所示:

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一個有效的身份驗證,對吧?我也這麼想。

登錄本身有效,但是當涉及到讀取字段'login'的值時它失敗 - 或者類似的東西。

調試吧給我講了:

將在登錄時執行的是查詢:

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

這是加載所有的數據正確,除了「登陸」的。出於某種原因,該場保持「0」(在AUTH網)

"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 

我在Windows 10上使用XAMPP v3.2.2,PHP 7.1.1和10.2.6-MariaDB作爲我的本地開發環境。我應該提到,我用最新穩定的MariaDB版本的新下載替換了此XAMPP版本的默認發行MariaDB。


(因爲遷移的事情錯)我還檢查在計算器上,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. 如果你是一個團隊有生產環境已經建立,始終創建新的遷移
  4. down()方法理會那麼多

一些材料從創作者&朋友Laravel關於遷移可以在這個Podcast http://www.laravelpodcast.com/episodes/68236-episode-53-bigger-better中聽到大約30分鐘的標記。