代码之家  ›  专栏  ›  技术社区  ›  gbalduzzi

使用Laravel Auth和加密的用户表发送重置链接

  •  0
  • gbalduzzi  · 技术社区  · 7 年前

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

    现在我必须在 users 表使用 Elocryptfive 库,所以我还添加了 email_hash 在db中存储邮件哈希的字段,以便通过用户的电子邮件轻松检索用户。

    我可以使用哈希轻松地对用户进行身份验证:

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   gbalduzzi    7 年前

    我找到了实现这一目标的方法。如果其他人在这个话题上需要帮助,我会回答自己的问题,提供有用的解决方案:

    在你的 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 为了指出正确的方向,我希望它能帮助别人。

    推荐文章