iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Modern Web

Laravel 9 漫遊,享受魔法般的極速網頁開發體驗系列 第 19

Day 19:使用寄信功能實作用戶認證信件

  • 分享至 

  • xImage
  •  

上次處理好了寄信的部分,可能很多人躍躍欲試,想要來用在自己的專案上面,比方說「用戶認證」的信件。

別著急!其實 Laravel 已經幫我們做好用戶認證的信件內容了!

我們來看看怎麼利用 Laravel 內建的用戶功能,來實作用戶認證的完整邏輯!

首先,我們打開 app/Model/User.php

<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;

各位可以看到 use Illuminate\Contracts\Auth\MustVerifyEmail; 被註解了,我們先將註解取消,並且讓 User 實作 MustVerifyEmail

調整之後,完整的程式如下

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable implements MustVerifyEmail
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

然後,我們在路由的 web.php 裡面,加上驗證 email 的路由

Route::get('/email-verify', function () {
    return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');

這邊的 ->name('verification.notice') 非常重要,因為 Laravel 是根據這個名稱來設置。

接著,我們加上一個路由,來處理點擊確認信之後的用戶

use Illuminate\Foundation\Auth\EmailVerificationRequest;
 
Route::get('/email-verify/{id}/{hash}', function (EmailVerificationRequest $request) {
    $request->fulfill();
 
    return redirect('/home');
})->middleware(['auth', 'signed'])->name('verification.verify');

都處理好之後,我們就可以來試試看效果囉!

我們嘗試註冊一個新用戶。註冊之後到 mailhog 後台,也就是 http://127.0.0.1:8025 看看

verify mail

我們成功寄出確認信件了!

連接網址是 http://127.0.0.1/verify-email/1/5a243e40b9f3a793ac435c28527ea48ca6545528?expires=1663601718&signature=b971b336456a9d1e544ad2cf5bfd161e54103099f95c71e046513e93bf1488a6 ,也就是我們所設置的路由,加上一些驗證參數。

今天有關用戶 email 認證的部分,就分享到這邊,我們明天見!


上一篇
Day 18:網站常用的寄信功能:Laravel 寄送 email 的開發與測試
下一篇
Day 20:Laravel 9 密碼重設功能
系列文
Laravel 9 漫遊,享受魔法般的極速網頁開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言