Laravel结合Redis发送邮箱验证码

2022-10-11 21:22:37 162 0
魁首哥

每天进步一点点…

我们在某些业务上,需要注册邮箱,为避免邮箱注册混乱、乱用他人邮箱,这就需要对邮箱进行验证。

一、设计思路

1、用户输入邮箱,点击验证

2、后端接收到邮箱后,随机生成一个code,用邮箱作为key,code为值保存到redis中,并使用laravel封装的Mail类发送给用户

3、用户收到邮件后,获取验证码并输入,后端把email、code和redis保存的值做一个匹对

二、前期准备

1、修改.env配置文件里面email部分的内容

 MAIL_MAILER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=xxxx@qq.com
MAIL_PASSWORD=xxxxxxxxxxxxxxxxx
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=xxxx@qq.com
MAIL_FROM_NAME=糊涂  

2、使用命令创建 EmailVerifyController.php 控制器

 php artisan make:controller Index/EmailVerifyController  

3、在routes/web.php中注册相关路由

  

4、在resoures/views/mail创建 SendEmailCode.blade.php 模块文件

三、代码实现

1、 EmailVerifyController.php 控制器

 input("email");
        $code = rand(100000, 999999);//验证码
        $expireTime = 60 * 3;//过期时间
        $EMAIL_VERIFY_CODE = "email:verify:code:" . $email;//redis key
        Redis::setex($EMAIL_VERIFY_CODE, $expireTime, $code);
        Mail::send("mail.SendEmailCode", ["code" => $code, "email" => $email], function (Message $message) use ($email) {
            $message->to($email);
            $message->subject("糊涂个人博客——邮箱验证");
        });
        if (Mail::failures()) {
            return ["code" => 0, "msg" => "warning"];
        }
        return ["code" => 1, "msg" => "success"];
    }

    /**
     * 验证
     * @param Request $request
     * @return array
     */
    public function verify(Request $request)
    {
        $email = $request->input("email");
        $code = $request->input("code");
        $EMAIL_VERIFY_CODE = "email:verify:code:" . $email;//redis key
        $isCode = Redis::get($EMAIL_VERIFY_CODE);
        if ($isCode && $isCode === $code) {
            return ["code" => 1, "msg" => "success"];
        }
        return ["code" => 0, "msg" => "warning"];
    }
}
  

2、 SendEmailCode.blade.php 模块

 



    
    
    Document
    



亲爱的用户:

您好!

感谢您使用糊涂个人博客开发平台。您正在进行邮箱验证,请在验证码输入框中输入此次验证码{{$code}}(3分钟内有效)以完成验证。
如非本人操作,请忽略此邮件,由此给您带来的不便请谅解!

糊涂个人博客开发平台

四、实现效果

自己可以根据相关需要修改样式代码

效果图

收藏
分享
海报
0 条评论
162
上一篇:使用 Eclipse 在 Fedora 上进行 PHP 开发 下一篇:PHP高级工程师面试题

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码