上次處理好了寄信的部分,可能很多人躍躍欲試,想要來用在自己的專案上面,比方說「用戶認證」的信件。
別著急!其實 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 看看
我們成功寄出確認信件了!
連接網址是 http://127.0.0.1/verify-email/1/5a243e40b9f3a793ac435c28527ea48ca6545528?expires=1663601718&signature=b971b336456a9d1e544ad2cf5bfd161e54103099f95c71e046513e93bf1488a6 ,也就是我們所設置的路由,加上一些驗證參數。
今天有關用戶 email 認證的部分,就分享到這邊,我們明天見!