资讯专栏INFORMATION COLUMN

laravel 用户发送邮件重置密码

OBKoro1 / 2959人阅读

摘要:重置密码由于重置密码需要发送邮件,而默认使用国外的驱动,所以需要改成国内的驱动,使用第一步忘记密码首先看到的是的代码使用这个显示发送邮件和发送邮件看到是如此干净,看来只有可能在第二部发送邮件再上一步我们知道,用到了一个里面有两个重要的方法

laravel5.3 重置密码

由于重置密码需要发送邮件,而laravel默认使用国外的驱动,所以需要改成国内的驱动,使用sendcloud

第一步:忘记密码

首先看到的是AppHttpControllersAuthForgotPasswordController.php的代码

  use SendsPasswordResetEmails;  //使用这个trait显示发送邮件,和发送邮件

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware("guest");
    }

看到是如此干净,看来只有可能在SendsPasswordResetEmails

第二部:发送邮件

再上一步我们知道,用到了一个SendsPasswordResetEmails trait,里面有两个重要的方法:

    //显示视图
     public function showLinkRequestForm()
        {
            return view("auth.passwords.email");
        }


  
      public function sendResetLinkEmail(Request $request)
        {
             //验证邮箱地址是否有效
            $this->validate($request, ["email" => "required|email"]);
    
     
            //发送邮件  sendResetLink是PasswordBroker 里面的一个方法
            $response = $this->broker()->sendResetLink(
                $request->only("email")
            );
            //根据发送邮件返回状态 返回相应
            return $response == Password::RESET_LINK_SENT
                        ? $this->sendResetLinkResponse($response)
                        : $this->sendResetLinkFailedResponse($request, $response);
        }
        
         /**
         * Get the broker to be used during password reset.
         *
         * @return IlluminateContractsAuthPasswordBroker 看这个返回值
         */
        public function broker()
        {
            return Password::broker();
        }

可以看到IlluminateContractsAuthPasswordBroker这个接口实例是IlluminateAuthPasswordsPasswordBroker.php这个文件,找到上面发送邮件使用的一个方法sendResetLink,如下

 public function sendResetLink(array $credentials)
    {
    
        //查找用户信息
        $user = $this->getUser($credentials);

        if (is_null($user)) {
            return static::INVALID_USER;
        }

        //真正发送邮件的地方,发现调用的User.php 里的方法
        $user->sendPasswordResetNotification(
            $this->tokens->create($user)
        );

        return static::RESET_LINK_SENT;
    }
第三步:用户数据模型

上一步看到发送邮件使用的是User.php这个model 里的 sendPasswordResetNotification方法

发现并没有这个方法,看到继承Authenticatable,进去看看:

发现了重大新闻,这个地方用了个trait CanResetPassword,看下代码:

//找到第二步中调用的方法了
 public function sendPasswordResetNotification($token)
    {
        $this->notify(new ResetPasswordNotification($token));//notify 又是什么鬼,暂时没有注意到
    }

看下ResetPasswordNotification,发现有个发送邮件的方法:

  public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line("You are receiving this email because we received a password reset request for your account.")
            ->action("Reset Password", url("password/reset", $this->token))
            ->line("If you did not request a password reset, no further action is required.");
    }
   // url("password/reset", $this->token)) 这个重写的时候用的上

这样看来,我们重现一下User.php中的这个方法就应该可以改写laravel默认发送邮件的方式了

 public function sendPasswordResetNotification($token)
    {
        // 模板变量
        $data = [
            "url" => url("password/reset", $token), //这个地址是IlluminateAuthNotificationsResetPassword 中方法toMail 里的url,复制过来就可以
            "name"=>$this->name,
        ];
        $template = new SendCloudTemplate( "zhihu_app_register", $data );

        Mail::raw( $template, function ( $message ) {
            $message->from( "xxxx@qq.com", "xxxx"  );

            $message->to( $this->email );
        } );
    }
}

这样我们就改了默认重置密码发送邮件的方法了

还有很多细节,等有空再去细抠,weaving love

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22833.html

相关文章

  • Laravel自带Auth 密码重置源码解析及扩展实现手机号密码找回

    摘要:到这里自带的密码重置的源码解读部分就完成了,下面我们就通过扩展一下实现手机号密码找回和自定义邮件发送方式找回密码,根据上面的代码解析如果你看懂的话应该了解,其实我们只要扩展和就可以了。 本文最早于发表本人博客: Laravel 自带 Auth 密码重置源码解析及扩展实现手机号密码找回 Larval 自带 Auth 密码重置源码解析及扩展实现手机号密码找回 Larval技术群小伙伴问密码...

    elliott_hu 评论0 收藏0
  • 解决Laravel5.1中如何配置QQ发送邮件

    摘要:在使用的找回密码功能时报错如下后来发现是配置原因,因为使用的是邮箱,需要在邮箱中配置开启设置在邮箱中设置账户中打开服务中修改文件配置信息在中配置邮件发送人名称和地址然后尝试点下密码重置 在使用Laravel5的Auth:ResetsPasswords找回密码功能时报错如下: Failed to authenticate on SMTP server with username XXX@...

    marek 评论0 收藏0
  • Django搭建个人博客:重置用户密码

    摘要:本章讲如何帮助健忘症患者,重置用户密码。实际上不仅内置了密码重置,还包括登录登出密码修改等功能。总结本章学习了使用第三方库,高效完成了重置密码的功能。有疑问请在杜赛的个人网站留言,我会尽快回复。 随着技术的发展,验证用户身份的手段越来越多,指纹、面容、声纹应有尽有,但密码依然是最重要的手段。 互联网处处都有密码的身影,甚至变成了现代人的一种负担。像笔者这样的,动辄几十个账号密码,忘记其...

    mumumu 评论0 收藏0
  • 使用qq邮箱服务器来实现laravel邮件发送

    摘要:本文来自原文链接欢迎作客我们的学习群在我们的底层核心技术实战揭秘视频中我们带领大家使用了专业的邮件测试服务来体验邮件发送的前前后后,下面给大家分享下利用邮箱服务器来实现的邮件发送。 本文来自pilishen.com----原文链接; 欢迎作客我们的php&Laravel学习群:109256050 在我们的Laravel底层核心技术实战揭秘 视频中,我们带领大家使用了专业的邮件测试服务m...

    xumenger 评论0 收藏0
  • Laravel 5.4 正式发布

    摘要:它的目的是提供正确的方式进行页面交互测试,所以可以使用去点击按钮或者链接填写表单甚至拖放。此外,提到测试运行比更快。此次因底层架构改变较大而重命名。这个功能受到的启发,能够将元素简化为可重用区域。 showImg(https://segmentfault.com/img/remote/1460000008212617); 转自 Laravel 社区:https://laravel-ch...

    Vultr 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<