Laravel 验证码认证学习记录小结
注:此处所用的注册等系列功能,均作用于laravel自带的用户认证机制
注册验证码
1.composer安装验证码
composerrequire"mews/captcha:~3.0"
2.运行以下命令生成配置文件config/captcha.php
phpartisanvendor:publish--provider='Mews.aptcha.aptchaServiceProvider'
3.前端展示验证码
4.后端验证(该扩展包是为Laravel定制的扩展包,完全兼容laravel注册功能,验证非常方便)只需要在app/Http/Controllers/Auth/RegisterController.php中的验证规则中加入如下代码:
'captcha'=>['required','captcha'],
邮箱认证
laravel自带邮箱认证
laravel自带的邮箱认证文件位于vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php,因为此文件采用trait声明,因此我们快速的将内容通过use集成到用户的模型中,并进行调用,如下:
namespaceApp\Models; useIlluminate\Foundation\Auth\UserasAuthenticatable; useIlluminate\Notifications\Notifiable; useIlluminate\Auth\MustVerifyEmailasMustVerifyEmailTrait; classUserextendsAuthenticatable{ useNotifiable,MustVerifyEmailTrait;
为了代码的规范,我们可以接入larave自带的邮箱验证接口Illuminate\Contracts\Auth\MustVerifyEmail,规定模型必须拥有相关的方法,具体方法如下(方法在MustVerifyEmailTrait中已经定义好,直接调用既可):
- hasVerifiedEmail()检测用户Email是否已认证;
- markEmailAsVerified()将用户标示为已认证;
- sendEmailVerificationNotification()发送Email认证的消息通知,触发邮件的发送;
- getEmailForVerification()获取发送邮件地址,提供这个接口允许你自定义邮箱字段。
发送邮件
我们使用了Laravel自带的RegisterController,控制器通过加载Illuminate.oundation.uth.egistersUserstrait来引入框架的注册功能,此时我们打开此trait来翻阅源码并定位到register(Request$request)方法:
publicfunctionregister(Request$request){ //检验用户提交的数据是否有误 $this->validator($request->all())->validate(); //创建用户同时触发用户注册成功的事件,并将用户传参 event(newRegistered($user=$this->create($request->all()))); //登录用户 $this->guard()->login($user); //调用钩子方法`registered()` return$this->registered($request,$user)?:redirect($this->redirectPath()); }
此方法处理了用户提交表单后的逻辑,我们把重点放在event(newRegistered($user=$this->create($request->all())));,这里使用了Laravel的事件系统,触发了Registered事件。
打开app/Providers/EventServiceProvider.php文件,此文件的$listen属性里我们可以看到注册了Registered事件的监听器:
protected$listen=[ Registered::class=>[SendEmailVerificationNotification::class,], ];
打开SendEmailVerificationNotification类,阅读其源码:vendor/laravel/framework/src/Illuminate/Auth/Listeners/SendEmailVerificationNotification.php
userinstanceofMustVerifyEmail&&!$event->user->hasVerifiedEmail()){ //发送邮件认证消息通知(认证邮件) $event->user->sendEmailVerificationNotification(); } } }
可以看出Laravel默认已经为我们设置了邮件发送的逻辑,接下来我们来测试一下。
测试邮件
测试之前,我们先设置下邮件发送到log中,以便后面的测试:
修改环境设置文件.env
MAIL_DRIVER=log
邮件一般发在storage/logs目录下的日志文件中
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。