Laravel——通過郵件找回密碼

劍歌丶君發表於2019-03-04
忘了密碼通過郵件找回 更符合現在的情形,可是邏輯比較混亂,在此梳理一下。 請接著往下看
1.建立一個忘了密碼的按鈕連結

按鈕

<a href="/admin/password/reset"   //跳到寫郵件地址
class="am-btn am-btn-default am-btn-sm am-fr" style="border-radius: 4px;">忘記密碼</a>
地址可以通過 終端 php artisan route:list 查詢地址連結
複製程式碼
2. 我們現在已經跳到了傳送填寫郵件的介面,這個時候我們就需要建立一個通知類`

php artisan make:notification ResetPassword (假設類名叫做 ResetPassword)

3. 通知類也建立好了, 現在要做的就是以郵件的方式把通知傳送出去。

傳送的方式有兩種。 第一種是通過Laravel自動生成的認證模組 user.php 裡寫一個傳送郵件的方法。 第二種是使用Notification門臉類。 Notification::send($users, new ResetPassword($token)) 這裡我們就主要了解一下第一種方法。

4. 我們開啟user.php 在最下面寫一個public 方法
public function sendPasswordResetNotification($token) {
    $this->notify(new ResetPassword($token));
}
複製程式碼
5. 現在我們要配置一下.env檔案 如下:(qq郵箱為例)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=675983959@qq.com  
MAIL_PASSWORD=fzzbaradqwfsbfgd    填寫的是授權碼
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=675983959@qq.com
MAIL_FROM_NAME=SHOP商城
複製程式碼

注意 :如果是qq郵箱 163郵箱需要自行設定

Laravel——通過郵件找回密碼

到了這裡功能基本就能實現了。可以發郵件了...


6. 這時候我們到第一步進入的介面 填寫號郵箱點選傳送

image.png
傳送之後 MAIL_FROM_ADDRESS=675983959@qq.com 在配置中的該郵箱地址 會收到一個 郵箱。 裡面都是英文的內容,我們需要把他修改成中文。 那麼開啟第二步執行的命令生成的 Notification檔案下的ResetPassword.php


    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->subject('重置密碼')
                    ->line('我們已收到您的郵件請求!')
                    ->action('如修改密碼請點選', url('/admin/password/reset', $this->token))
                    ->line('謝謝您對我們SHOP商城的支援和信任!');
    }

$this->token 這個通過構造裡傳進來   在上面 建立一個成員屬性 var $token 構造裡如下

        public function __construct($token)
        {
             $this->token = $token;
        }
複製程式碼

image.png
再還有一點模版裡的英文也可以更改 , 自行更改。

7. 效果圖如下:

image.png

8. 點選如圖的藍色按鈕 會跳到重置密碼 頁面 填好後 跳轉可能會有問題

如果是跳到了 xxx.dev/home 這個時候只需要在中介軟體middleware資料夾下的RedirectIfAuthenticated.php 將裡面的內容修改為如下圖所示。

image.png

9. 大功告成!!! 謝謝觀看~

相關文章