Отправить ссылку сброса с помощью Laravel Auth и зашифрованной таблицы пользователей - PullRequest
0 голосов
/ 17 мая 2018

У меня есть установка laravel 5.4, и я всегда использовал защиту аутентификации Laravel по умолчанию для обработки аутентификации пользователя и, главным образом, процесса восстановления пароля.

Теперь мне пришлось зашифровать электронную почту в таблице users с помощью библиотеки Elocryptfive , поэтому я также добавил поле email_hash, где хэш почты хранится в БД, чтобы легко восстановить пользователей по их электронной почте.

Я могу легко аутентифицировать пользователей, используя хэш:

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

Что я не могу получить, так это процесс сброса пароля. Есть ли класс, который нужно переопределить, чтобы получить пользователей по email_hash, затем получить доступ к расшифрованному письму и отправить письмо, не переписывая весь забытый пароль?

1 Ответ

0 голосов
/ 17 мая 2018

Я нашел способ достичь этого. Я отвечу на свой вопрос, чтобы найти полезное решение, если кому-то еще понадобится помощь по теме:

В вашем 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')
    ];
}

Спасибо Майку Родэму за то, что он указал верное направление, надеюсь, это кому-нибудь поможет.

...