使用 Laravel 身份验证和加密用户 table 发送重置 link

Send reset link with Laravel Auth and encrypted user table

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

现在我必须使用 Elocryptfive 库对 users table 中的电子邮件进行加密,因此我还添加了 email_hash 字段,其中邮件的哈希值是存储在数据库中,以便通过电子邮件轻松检索用户。

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

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

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

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

在您的 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 函数:

/**
 * Get the password reset credentials from the request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
protected function credentials(Request $request)
{
    return [
        'email_hash' => hash('sha256', $request->get('email')),
        'password' => $request->get('password'),
        'password_confirmation' => $request->get('password_confirmation'),
        'token' => $request->get('token')
    ];
}

感谢Mike Rodham指点方向,希望对大家有所帮助