イントロダクション
多くのWebアプリケーションはアプリケーション利用開始前に、ユーザーのメールアドレスを確認する必要があります。アプリケーションごとに再実装しなくても済むように、Laravelはメールを送信し、メールの確認リクエストを検証する便利なメソッドを用意しています。
モデルの準備
利用を開始するには、App\User
モデルがIlluminate\Contracts\Auth\MustVerifyEmail
契約を実装していることを確認してください。
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
// ...
}
データベースの検討
メール確認カラム
次に、メールアドレスを確認した日時を保存するための、email_verified_at
カラムをusers
テーブルに含める必要があります。Laravelフレームワークにデフォルトで含まれている、users
テーブルマイグレーションには、あらかじめこのカラムが準備されています。ですから、必要なのはデータベースマイグレーションを実行することだけです。
php artisan migrate
ルート
確認リンクを送信し、メールを確認するために必要なロジックを含む、Auth\VerificationController
クラスをLaravelは用意しています。このコントローラに必要なルートを登録するには、Auth::routes
メソッドに、verify
オプションを渡してください。
Auth::routes(['verify' => true]);
保護下のルート
Routeミドルウェアを指定したルートに対しメールアドレス確認済みのユーザーのみアクセスを許すために使用します。Illuminate\Auth\Middleware\EnsureEmailIsVerified
で定義しているverified
ミドルウェアをLaravelは用意しています。このミドルウェアは、アプリケーションのHTTPカーネルで登録済みですので、ルート定義にこのミドルウェアを指定するだけです。
Route::get('profile', function () {
// Only verified users may enter...
})->middleware('verified');
ビュー
メール確認に必要なビューは、laravel/ui
Composerパッケージを使用して生成します。
composer require laravel/ui "^1.2" --dev
php artisan ui vue --auth
メール確認のビューはresources/views/auth/verify.blade.php
として設置されます。アプリケーションの必要に合わせて自由にカスタマイズしてください。
メール確認後
メールアドレスを確認後、ユーザーを自動的に/home
ヘリダイレクトします。VerificationController
のredirectTo
メソッドかプロパティにより、確認後のリダイレクト先をカスタマイズできます。
protected $redirectTo = '/dashboard';
イベント
メールの確認過程で、Laravelはイベントをディスパッチします。EventServiceProvider
の中で、これらのイベントにリスナを指定できます。
/**
* アプリケーションにマップするイベントリスナ
*
* @var array
*/
protected $listen = [
'Illuminate\Auth\Events\Verified' => [
'App\Listeners\LogVerifiedUser',
],
];