使用 Laravel Auth 和加密的用户表发送重置链接
Posted
技术标签:
【中文标题】使用 Laravel Auth 和加密的用户表发送重置链接【英文标题】:Send reset link with Laravel Auth and encrypted user table 【发布时间】:2018-10-27 17:21:24 【问题描述】:我有一个 laravel 5.4 安装,我总是使用默认的 Laravel 身份验证保护来处理用户身份验证,主要是密码恢复过程。
现在我必须使用Elocryptfive 库对users
表中的电子邮件进行加密,因此我还添加了email_hash
字段,其中邮件的哈希值存储在数据库中,以便通过用户轻松检索用户电子邮件。
我可以使用哈希轻松验证用户身份:
Auth::attempt([
'email_hash' => hash('sha256', $request->get('email')),
'password' => $request->get('password')]
, $remember);
我无法使用的是密码重置过程。是否有一个类可以重写,以便通过 email_hash 检索用户,然后访问解密的电子邮件并发送邮件,而无需重写整个忘记密码的过程?
【问题讨论】:
在您的ResetPasswordController.php
中,您可以覆盖Illuminate\Foundation\Auth\ResetsPasswords
使用的函数,您可以自己调出文件或查看the laravel api。让我知道这是否有帮助。
是的,我必须做类似的事情,我回答了这个问题,作为其他有同样问题的人的参考。谢谢
太棒了,很高兴我能帮上忙!
【参考方案1】:
我找到了实现这一目标的方法。如果其他人需要有关该主题的帮助,我将回答我自己的问题以提供有用的解决方案:
在您的 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 Auth 和加密的用户表发送重置链接的主要内容,如果未能解决你的问题,请参考以下文章