#Laravel5.7で追加された「 Email Verification 」とは?
サインアップ(Register)時に登録したメールアドレスに「URLを自動で記載してメールを送信」し、受信したメールアドレスから「記載されてるURLをクリック」して登録完了になる最近良く見かけるやつですね!
認証画面はとても簡単に作れてたのですが、これって適当なメールアドレス何じゃない???的なEmailアドレス確認が取れなかったので、これは助かります!!!
(Laravel5.7仕様は https://laravel.com/docs/5.7/verification を参考に)
##使った環境
Apache2
Laravel 5.7
PHPバージョン PHP7.1.20
Cloud9
##前提条件
php artisan make:auth
上記コマンドにて、Auth:認証画面が作成され、
動作する基本設定が済んでいること。
1. Routingの変更
//変更前
//Auth::routes();
//Route::get('/home', 'HomeController@index')->name('home');
//変更後
Auth::routes(['verify' => true]);
Route::get('/home', 'HomeController@index')->name('home')->middleware("verified");
######POINT
「 ->middleware("verified"); 」を必要なルーティングに追加してください。
※メールアドレスの確認が取れてないアドレスは「メールの確認」を催促する画面が表示され続けます。
2. App\user.phpを変更
コード内のコメント箇所に追加・変更を記してあります。
namespace App;
use Illuminate\Auth\MustVerifyEmail; //追加1
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract;
// class User extends Authenticatable { の箇所を以下に変更2
class User extends Authenticatable implements MustVerifyEmailContract { //変更2
use MustVerifyEmail, Notifiable; //MustVerifyEmailを追加
/**
* 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',
];
}
##3.Mail送信環境を準備
メール送信&受信確認が必要なので
『 MAILTRAP.IO 』を使います。
mailtrap.io はSMTPを使ったメールの送信のダミーサーバーです。
詳しくは「ララ帳」ページ内の「.ENV」の章で解説してますので、以下URLをご参考に。
https://laravel10.wordpress.com/2015/02/22/%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A/
4.サインアップ(Register)をおこなうと、以下画面が表示されます。
画面には登録したEmailを確認するよう表記されます。
mailtrap.io にメールが飛んでると思いますので、確認しましょう。
5.以下「mailtrap.io」にメールが送られて来ます。
1.画面左にメールが溜まっていきます。
2.画面右側にメール内容が表示されます。「青いボタン」クリックしてメールの承認をおこないます。
6. Laravel認証後画面が表示されます。
テスト的に環境を作ったので/homeがログイン後画面になっていることを御了承ください。
######メール認証をおこなえていない(メールを確認する催促が再度表示される)
備考1: Email認証後のリダイレクト先を変更
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/home'; //表示したいリダイレクト先に変更してください
備考2: 画面の日本語化
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">登録したメールを確認してください。</div>
<div class="card-body">
@if (session('resent'))
<div class="alert alert-success" role="alert">
新しい確認リンクがメールアドレスに送信されました。
</div>
@endif
続行する前に、電子メールで確認リンクを確認してください。メールが届かない場合は、 <a href="{{ route('verification.resend') }}">ここをクリックして別のメールをリクエストしてください</a>。
</div>
</div>
</div>
</div>
</div>
@endsection
感想
以外に苦戦しましたが、動作してみたら簡単だったなーと思いました。
Authの認証機能で、Emailアドレスの確認がなかったので、今後は「Email Verification」使えそうですね。早速、私のプロダクトにも活用してみようと思います。