イントロダクション
多くのWebアプリケーションはアプリケーション利用開始前に、ユーザーのメールアドレスを確認する必要があります。アプリケーションごとに再実装しなくても済むように、Laravelはメールを送信し、メールの確認リクエストを検証する便利なメソッドを用意しています。
モデルの準備
利用を開始するには、App\User
モデルがIlluminate\Contracts\Auth\MustVerifyEmail
契約を実装していることを確認してください。
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
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');
ビュー
make:auth
コマンドを実行すると、Laravelはメール確認に必要なビューを全て生成します。ビューは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',
],
];