こんばんは、のるぼるのんです。
遂にLaravel5.7がリリースされましたね!リリースノートには様々な面白そうな機能がてんこ盛りです!
今回はその中から、ユーザー登録時に自動で確認メールを送信する機能を実装、ご紹介します!
laravelプロジェクトを導入するところから始めます。
Laravelプロジェクト導入
authプロジェクトを導入します。
1 |
composer create-project --prefer-dist laravel/laravel auth |
Laravel5.7がインストールできました。認証機能を実装していきましょう。
make:authコマンド、マイグレーション
1 |
php artisan make:auth |
実際に出力されたmigrateファイルを確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); // ここが増えました! $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } } |
timestampのemail_verified_atカラムが追加されています。マイグレーションしましょう。
1 |
php artisan migrate |
email_verified_atカラムが含まれたusersテーブルが作成されました。
登録してみます。
この時点ではメール送信は行えていません。当然email_verified_atにもNULLが入ります。
メール送信機能追加
web.php
1 |
Auth::routes(['verify' => true]); |
Auth::route()にEメール認証オプションを与えます。
User.php
トレイトなどを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Auth\MustVerifyEmail; // 追記 use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract; //implements class User extends Authenticatable implements MustVerifyEmailContract // ここも { use MustVerifyEmail, Notifiable; // 追記 /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; } |
.env
メール設定をします。今回はmailtrapを使用します。
1 2 3 4 5 6 |
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=hogehoge //mailtrapの MAIL_PASSWORD=hugahuga // ID,passを記述します MAIL_ENCRYPTION=null |
ユーザー登録してみましょう。ローディングがちょっと長ければOKです。
こんなメールが届きました。クリックするとemail_verified_atに日付が入ります。
これでメール認証機能は実装完了です。
メール認証済みユーザーのみアクセス
認証済ユーザーのみアクセス可能にするには、web.phpでmiddlewareを追加します。今回はHome画面(/home)をメール認証したユーザーのみ入れるようにしましょう。
web.php
1 |
Route::get('/home', 'HomeController@index')->middleware('verified')->name('home'); |
認証していないユーザーは自動的に/email/verifyへとリダイレクトされ、認証を促すメッセージが表示されました。
なお、ユーザー登録後のリダイレクト先を認証が必要なページにしてしまうと、この警告画面に飛んでしまいますのでご注意を。
認証を促す画面は/resources/views/auth/verify.blade.phpから編集可能です!
Laravel、どんどん便利になってますね!
コメントを書く