イントロダクションIntroduction
多くのWebアプリケーションはアプリケーション利用開始前に、ユーザーのメールアドレスを確認する必要があります。アプリケーションごとに再実装しなくても済むように、Laravelはメールを送信し、メールの確認リクエストを検証する便利なメソッドを用意しています。Many web applications require users to verify their email addresses before using the application. Rather than forcing you to re-implement this on each application, Laravel provides convenient methods for sending and verifying email verification requests.
モデルの準備Model Preparation
使い始めるには、App\User
モデルがIlluminate\Contracts\Auth\MustVerifyEmail
契約を実装していることを確認してください。To get started, verify that your App\User
model implements the Illuminate\Contracts\Auth\MustVerifyEmail
contract:
<?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;
// ...
}
モデルへこのインターフェイスを追加すると、新しい登録ユーザーへ自動的にメール確認のリンクを含むメールが送信されます。EventServiceProvider
で確認できるように、Illuminate\Auth\Events\Registered
イベントに対するSendEmailVerificationNotification
リスナの指定をLaravelは用意しています。Once this interface has been added to your model, newly registered users will automatically be sent an email containing an email verification link. As you can see by examining your EventServiceProvider
, Laravel already contains a SendEmailVerificationNotification
listener that is attached to the Illuminate\Auth\Events\Registered
event.
データベースの検討Database Considerations
メール確認カラムThe Email Verification Column
次に、メールアドレスを確認した日時を保存するための、email_verified_at
カラムをusers
テーブルに含める必要があります。Laravelフレームワークにデフォルトで含まれている、users
テーブルマイグレーションには、あらかじめこのカラムが準備されています。ですから、必要なのはデータベースマイグレーションを実行することだけです。Next, your user
table must contain an email_verified_at
column to store the date and time that the email address was verified. By default, the users
table migration included with the Laravel framework already includes this column. So, all you need to do is run your database migrations:
php artisan migrate
ルートRouting
確認リンクを送信し、メールを確認するために必要なロジックを含む、Auth\VerificationController
クラスをLaravelは用意しています。このコントローラに必要なルートを登録するには、Auth::routes
メソッドに、verify
オプションを渡してください。Laravel includes the Auth\VerificationController
class that contains the necessary logic to send verification links and verify emails. To register the necessary routes for this controller, pass the verify
option to the Auth::routes
method:
Auth::routes(['verify' => true]);
保護下のルートProtecting Routes
Routeミドルウェアを指定したルートに対しメールアドレス確認済みのユーザーのみアクセスを許すために使用します。Illuminate\Auth\Middleware\EnsureEmailIsVerified
で定義しているverified
ミドルウェアをLaravelは用意しています。このミドルウェアは、アプリケーションのHTTPカーネルで登録済みですので、ルート定義にこのミドルウェアを指定するだけです。Route middleware[/docs/{{version}}/middleware] can be used to only allow verified users to access a given route. Laravel ships with a verified
middleware, which is defined at Illuminate\Auth\Middleware\EnsureEmailIsVerified
. Since this middleware is already registered in your application's HTTP kernel, all you need to do is attach the middleware to a route definition:
Route::get('profile', function () {
// 確認済みユーザーのときだけ実行されるコード…
})->middleware('verified');
ビューViews
メール確認に必要なビューは、laravel/ui
Composerパッケージを使用して生成します。To generate all of the necessary view for email verification, you may use the laravel/ui
Composer package:
composer require laravel/ui
php artisan ui vue --auth
メール確認のビューはresources/views/auth/verify.blade.php
として設置されます。アプリケーションの必要に合わせて自由にカスタマイズしてください。The email verification view is placed in resources/views/auth/verify.blade.php
. You are free to customize this view as needed for your application.
メール確認後After Verifying Emails
メールアドレスを確認後、ユーザーを自動的に/home
ヘリダイレクトします。VerificationController
のredirectTo
メソッドかプロパティにより、確認後のリダイレクト先をカスタマイズできます。After an email address is verified, the user will automatically be redirected to /home
. You can customize the post verification redirect location by defining a redirectTo
method or property on the VerificationController
:
protected $redirectTo = '/dashboard';
イベントEvents
メールの確認過程で、Laravelはイベントをディスパッチします。EventServiceProvider
の中で、これらのイベントにリスナを指定できます。Laravel dispatches events[/docs/{{version}}/events] during the email verification process. You may attach listeners to these events in your EventServiceProvider
:
/**
* アプリケーションにマップするイベントリスナ
*
* @var array
*/
protected $listen = [
'Illuminate\Auth\Events\Verified' => [
'App\Listeners\LogVerifiedUser',
],
];