繁体   English   中英

如何为 Laravel Auth 创建自定义密码字段

[英]How to create a custom password field for Laravel Auth

我需要登录Igrejas表中注册的用户,这些用户具有responsavel_cpfresponsavel_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_cpfresponsavel_senha替换默认字段emailpassword

您可以像这样覆盖用户模型中的密码列:

// 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) ,您可以看到它的作用:

  • 在 auth 表中查找与$credentials数组中除password之外的所有条件匹配的第一条记录(因此在上面的示例中仅使用email )。 因此,您可以添加另一个键,例如is_webmaster$authGuard->attempt(['email' => $request->post('email'), 'is_webmaster' => 1])然后将检索第一个用户记录具有这些属性。
  • 检索此记录后,将根据您的输入检查其密码列中的哈希值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM