使用Laravel Auth和加密用户表

时间:2018-05-17 12:26:44

标签: php laravel authentication encryption forgot-password

我安装了laravel 5.4并且我总是使用默认的Laravel身份验证防护来处理用户身份验证,主要是密码恢复过程。

现在我必须使用Elocryptfive库加密users表中的电子邮件,所以我还添加了email_hash字段,其中邮件的哈希值按顺序存储在数据库中通过电子邮件轻松检索用户。

我可以使用哈希轻松验证用户身份:

Auth::attempt([
    'email_hash' => hash('sha256', $request->get('email')), 
    'password' => $request->get('password')]
, $remember);

我无法工作的是密码重置过程。是否有一个类要覆盖以通过email_hash检索用户,然后访问解密的电子邮件并发送邮件,而不重写整个密码忘记的过程?

1 个答案:

答案 0 :(得分:1)

我找到了实现这一目标的方法。如果其他人需要关于该主题的帮助,我将回答我自己的问题以提供有用的解决方案:

tsconfig.app.json中,覆盖ForgotPasswordController.php功能:

sendResetLinkEmail

/** * Send a reset link to the given user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function sendResetLinkEmail(Request $request) { $this->validateEmail($request); $hashed = hash('sha256', $request->get('email')); $user = User::where('email_hash', $hashed)->first(); if (!is_null($user)) { $response = Password::sendResetLink( ['email_hash' => $hashed] ); } else { $response = Password::INVALID_USER; } return $response == Password::RESET_LINK_SENT ? $this->sendResetLinkResponse($response) : $this->sendResetLinkFailedResponse($request, $response); } 中,覆盖ResetPasswordController.php功能:

credentials

感谢Mike Rodham指出了正确的方向,我希望它有所帮助。