LARA-邮件系统

学习笔记,持续更新

总结

  • 数据表中需要两个字段,一个actiavtion_token记录用户注册时生成的令牌。另一个是activated,布尔值,记录用户是否已经激活成功
  • 模型中使用creating方法,该方法设定监听模型创建之前的事件。(用户在注册时生成$user->activation_token)
    • 设定static boot()方法,
    • 重写 parent::boot()
    • static::creating(function($user)){ 生成随机30个字符串}
  • env中设置MAIL_DIRVERlog
  • 路由:路由中设定方法,注册时生成{token}
  • 视图:生成激活连接
  • 登录控制器:Auth::user->activated()判断该用户实例的avtivated字段是否为true
    • 成功:渲染连接跳转到主页,并绑定Auth::user()权限
    • 失败:自定义,例如设置用户未激活时不能发帖(看项目需求)
  • 发送邮件
    • view 发送邮件视图
    • data 绑定数据
    • from 发件人
    • name 发件人名称
    • to 收件人
    • subject 主题
    • 调用Mail::send()
  • 用户控制器:用户点击注册连接后,查找用户的activation_token字段判断两者的token是否相同
    • 模型::where(‘activation_token’,$token)->firstOrFail() 若匹配成功则进行以下修改
    • 模型实例->activated=true 将激活状态从false变更为true
    • 模型实例->activation_tokne=null 将用户token设置为null
    • 入库save()
    • 相关渲染跳转
  • 在log中调试

账户激活

常见的门户网站,用户一旦注册成功即可登录。只有当用户成功激活自己的帐号时才能进行更多操作。
需要给用户设定两个字段,用于保存用户的激活令牌和激活状态。

  • 激活令牌验证用户身份是否唯一
  • 激活状态则判断用户是否已激活

一般流程如下

  1. 用户注册成功后,自动生成激活令牌
  2. 将激活的令牌以连接的形式附带在注册邮件中,并发送到用户注册的邮箱上
  3. 用户点击注册链接跳转到指定路由,路由收到激活令牌参数映射给相关控制器处理
  4. 控制器拿到激活的令牌并进行验证,验证通过后对该用户进行激活,并将其激活状态设为已激活
  5. 用户激活成功,自动登录

表设计

除了常规字段,还需添加2个字段,一个是activation_token默认为可选(非激活状态下),另一个为activated默认为false判断 用户是否已激活

生成令牌

Eloquent模型默认提供多个事件。例如creating方法可以监听模型被创建之前进行一些设置。对事件进行监听和订阅,从而在事件被触发时接收到相应并执行一些指定操作

  • creating用于监听模型被创建之前的事件
  • created用于监听模型创建之后的事情

在模型中添加

public static function boot()
{   
    //重写父类构造方法
    parent::boot() 

    //模型实例在创建前,该模型实例生成一个随机30位字符的字符串
    static::creating(function($user){
        $user->activation_token=str_random(30)
    }
}

邮件程序

lara可使用Log邮件驱动的方式来调试邮件发送功能(本地测试)storage/logs/laravel.log

激活账号

激活路由

当用户注册时,将附带用户生成的激活令牌,在用户是点击激活之后,将令牌通过路由参数传递到控制器指定动作,最终生成如下

http://自定义域名/xxxxxx/xxxxx/O1TTEr3faVq4fpzFXaOVQD4EAO9mQL

登录时检查是否已激活

在相关控制器中,通过判断Auth::user()->activated是否为true再执行相关指令。可设定未激活时无法进行某些操作.

发送邮件

use Mail //引入Mail类

protected function sendEmailConfirmationTo($user)
    {
        $view =          //视图
        $data =          //视图绑定数据
        $from =          //发件人邮箱
        $name =          //发件人名称
        $to =            //收件人
        $subject =       //邮件主体
        Mail::send($视图, $绑定数据, function ($message) use ($发件人邮箱, $发件人名称, $收件人, $主题) {
            $message->from($from, $name)->to($to)->subject($subject);
        });
    }

猜你喜欢

转载自blog.csdn.net/zgy0777/article/details/82557850