26
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

最新Laravel 5.7の便利な機能「正しいメールアドレスのみ登録させる機能:Email Verification」

Last updated at Posted at 2018-09-05

image.png
#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

##前提条件

command
php artisan make:auth

上記コマンドにて、Auth:認証画面が作成され、
動作する基本設定が済んでいること。

1. Routingの変更

Routes\web.php

//変更前
//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を変更

コード内のコメント箇所に追加・変更を記してあります。

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)をおこなうと、以下画面が表示されます。

image.png
画面には登録したEmailを確認するよう表記されます。
mailtrap.io にメールが飛んでると思いますので、確認しましょう。

5.以下「mailtrap.io」にメールが送られて来ます。

1.画面左にメールが溜まっていきます。
2.画面右側にメール内容が表示されます。「青いボタン」クリックしてメールの承認をおこないます。
image.png

6. Laravel認証後画面が表示されます。

テスト的に環境を作ったので/homeがログイン後画面になっていることを御了承ください。

######メール認証がおこなわれている
image.png

######メール認証をおこなえていない(メールを確認する催促が再度表示される)
image.png

備考1: Email認証後のリダイレクト先を変更

/app/Http/Controllers/Auth/VerificationController.php

    /**
     * Where to redirect users after verification.
     *
     * @var string
     */
    protected $redirectTo = '/home'; //表示したいリダイレクト先に変更してください
 

備考2: 画面の日本語化

/resources/views/auth/verify.blade.php
@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」使えそうですね。早速、私のプロダクトにも活用してみようと思います。

26
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?