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);
        });
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章