[英]How to create a custom password field for Laravel Auth
我需要登录Igrejas表中注册的用户,这些用户具有responsavel_cpf和responsavel_senha字段,但函数validateCredentials 中的Laravel 需要名称'password'
。
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];
}
我尝试使用尝试登录但没有成功:
$userdata = array(
'responsavel_cpf' => Input::get('email'),
'responsavel_senha' => Input::get('password')
);
if (Auth::guard('igrejas')->attempt($userdata)) {
return Redirect::to('dashboard_paroquia');
} else {
return Redirect::to('login');
}
我该怎么做才能用responsavel_cpf和responsavel_senha替换默认字段email和password ?
您可以像这样覆盖用户模型中的密码列:
// User.php
public function getAuthPassword()
{
return $this->custom_pw_field;
}
但是,如果您确实想将不显式包含password
的数组传递给Auth::guard('xxx')->attempt($credentials)
(没有理由!),您可能必须覆盖并手动添加Illuminate\\Auth\\EloquentUserProvider
,这似乎有很多工作。
所以我建议只使用以下内容:
Auth::guard('xxx')->attempt([
'email' => $request->post('email'),
'password' => $request->post('password')
]);
然后, password
密钥应根据您定义的custom_pw_field
进行验证。
通过查看Illuminate\\Auth\\EloquentUserProvider
的源代码并检查函数public function retrieveByCredentials(array $credentials)
,您可以看到它的作用:
$credentials
数组中除password
之外的所有条件匹配的第一条记录(因此在上面的示例中仅使用email
)。 因此,您可以添加另一个键,例如is_webmaster
如$authGuard->attempt(['email' => $request->post('email'), 'is_webmaster' => 1])
然后将检索第一个用户记录具有这些属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.