使用 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指点方向,希望对大家有所帮助
我有一个 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指点方向,希望对大家有所帮助