2017-06-20 61 views
0

我在我的laravel應用程序中設置了多重身份驗證。我爲管理員,醫生和病人設置了不同的警衛和提供者。我還爲我的config\auth.php中的各種警衛設置了重定向。 我現在唯一遇到的問題是,我想讓醫生用一個名爲MDCN的唯一編號登錄,該編號被保存到數據庫表中而不是電子郵件中。請如何爲醫生定製登錄信息? Ps:我也爲每個設置了模型,我使用laravel默認驗證。在laravel多重身份驗證中爲單個警衛定製登錄憑證

了警惕:

'guards' => [ 
     'web' => [ 
      'driver' => 'session', 
      'provider' => 'users', 
     ], 

     'api' => [ 
      'driver' => 'token', 
      'provider' => 'users', 
     ], 

     'admin' => [ 
      'driver' => 'session', 
      'provider' => 'admins', 
     ], 
     'admin-api' => [ 
      'driver' => 'token', 
      'provider' => 'admins', 
     ], 

     'doctor' => [ 
      'driver' => 'session', 
      'provider' => 'doctors', 
     ], 
     'doctor-api' => [ 
      'driver' => 'token', 
      'provider' => 'doctors', 
     ], 
    ], 

和供應商:

'providers' => [ 
     'users' => [ 
      'driver' => 'eloquent', 
      'model' => App\Models\User::class, 
     ], 

     'admins' => [ 
      'driver' => 'eloquent', 
      'model' => App\Models\Admin::class, 
     ], 

     'doctors' => [ 
      'driver' => 'eloquent', 
      'model' => App\Models\Doctor::class, 
     ], 
], 

回答

0

應用程序\ HTTP \控制器\身份驗證\的LoginController您可以覆蓋該由什麼字段應該驗證返回的方法請檢查,如果您正在登錄醫生,您可以通過MDCN

protected function credentials(Request $request) 
{ 
    return $request->only('MDCN', 'password'); 
} 
+0

但不會影響其他衛兵?就像用戶使用電子郵件和密碼登錄一樣? –

+0

@OkoroaforChukwuemeka是的,這將影響所有登錄,因此當只有醫生登錄才能獲取MDCN而不是電子郵件時,您必須檢查一些情況。 – TheFallen

0

我終於解決了這個問題,謝謝Alex Curtis。 爲了做到這一點,你需要自定義每個模型,告訴它你想用什麼來登錄。

因此,對任何模型,你想用一個用戶名,而不是你需要的代碼塊添加到模型中的電子郵件登錄:

public function username() 
{ 
    return 'username'; 
} 

而只是確保值返回(在這個例子中的用戶名)匹配該模型的表中具有您要使用的標識符的列名稱。

很明顯,您還需要確保在數據庫中有一列用於保存此數據,您希望它可以進行批量分配(通過在模型中自定義$ fillable數組),並且還希望列被索引和唯一。

爲了得到這個要在遷移,看起來像這樣創建列:

$table->string('username')->unique(); 

這將使該列的唯一索引。

默認是電子郵件,所以如果您使用的是電子郵件,那麼您不必擔心這一點,但任何使用電子郵件以外的其他模型都需要對該用戶類型的模型進行此更改。