2017-06-20 65 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(); 

这将使该列的唯一索引。

默认是电子邮件,所以如果您使用的是电子邮件,那么您不必担心这一点,但任何使用电子邮件以外的其他模型都需要对该用户类型的模型进行此更改。