目的
- LaravelのAuth認証ではメールアドレスはただ入力するだけで、入力されたメールアドレスが正しい物であるかどうかの確認がない
- 入力メールアドレス宛にメールを送信し、初回のログインはメール内のURLからのみ行える様にする
実施環境
- ハードウェア環境
項目 | 情報 |
---|---|
OS | macOS Catalina(10.15.5) |
ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
プロセッサ | 2GHzクアッドコアIntel Core i5 |
メモリ | 32 GB 3733 MHz LPDDR4 |
グラフィックス | Intel Iris Plus Graphics 1536 MB |
- ソフトウェア環境
項目 | 情報 | 備考 |
---|---|---|
PHPバージョン | 7.4.3 | Homwbrewを用いて導入 |
Laravelバージョン | 8.1.0 | commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う |
MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする |
前提条件
- 前述した実施環境に準ずる環境が整っていること。
- Laravelアプリが作成され、アプリの起動、ブラウザからの確認ができる状態になっていること。
- Authを用いたユーザ認証機能がすでに付与されていること。
前提情報
- 筆者は新規でLaravel8のアプリを作成して本検証を実施する。
読後感
- LaravelのAuth認証にメールアドレスの確認処理を付与することができる。
- ユーザ認証情報入力→メール受信→メール内のURLから初回ログインをしてもらう。
概要
- .envの修正
- モデルファイルの修正
- ルーティング情報の修正
- コントローラファイルの修正
- 確認
詳細
- .envの修正
-
アプリ名ディレクトリで下記コマンドを実行して.envファイルを開く。
$ vi .env
-
MAIL_MAILERの設定を下記の様に修正する。メール送信は行われず、情報がLaravelのログに出力される。
アプリ名ディレクトリ/.envMAIL_MAILER=log
-
下記に修正後の.envファイルの全体の内容を記載する。
アプリ名ディレクトリ/.envAPP_NAME=Laravel APP_ENV=local APP_KEY=アプリキーの記載は各個人で異なります。 APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=DB名 DB_USERNAME=root DB_PASSWORD=皆さんの環境のMySQLのrootユーザのパスワード BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=log MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
-
- モデルファイルの修正
-
アプリ名ディレクトリで下記コマンドを実行してusersテーブルにリンクするモデルファイルを開く。
$ vi app/Models/User.php
-
下記の様に修正する。
アプリ名ディレクトリ/app/Models/User.php<?php namespace App; // 下記を修正する //use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Contracts\Auth\MustVerifyEmail as MustVerifyEmailContract; use Illuminate\Auth\MustVerifyEmail; // 上記までを修正する use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; // 下記を修正する //class User extends Authenticatable class User extends Authenticatable implements MustVerifyEmailContract { // 下記を修正する //use Notifiable; 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', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; }
-
- ルーティング情報の修正
-
アプリ名ディレクトリで下記コマンドを実行してルーティングファイルを開く。
$ vi routes/web.php
-
下記の様に修正を行う。
アプリ名ディレクトリ/routes/web.php<?php use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); // 下記を修正する //Auth::routes(); Auth::routes(['verify' => true]);
-
- コントローラファイルの修正
-
アプリ名ディレクトリで下記コマンドを実行してコントローラファイルを開く。
$ vi app/Http/Controllers/HomeController.php
-
下記の様に修正を行う。
アプリ名ディレクトリ/app/Http/Controllers/HomeController.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { // 下記を修正する //$this->middleware('auth'); $this->middleware('verified'); } /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index() { return view('home'); } }
-
- 確認
-
アプリ名ディレクトリで下記コマンドを実行してローカルサーバを起動する。
$ php artisan serve
-
下記リンクにアクセスする。
-
下記のページの右上の「REGISTER」をクリックする。
-
任意の情報を入力し「Register」をクリックする。
-
下記画面が表示されることを確認する。
-
アプリ名ディレクトリで下記コマンドを実行してLaravelのログファイルを開く。
$ vi storage/logs/laravel.log
-
開いたログファイルの最終行付近に下記の様な記載があることを確認する。
アプリ名ディレクトリ/storage/logs/laravel.log[Laravel](http://localhost) # Hello! Please click the button below to verify your email address. Verify Email Address: http://127.0.0.1:8000/email/verify/6/1107c7572edff3d7050bd4c68404ff6d0919d508?expires=1598068938&signature=a52ea1e97b368ac4b68dd2183cd3ff84d121b608556673e01c6a1aa2a5715161 If you did not create an account, no further action is required. Regards, Laravel If you’re having trouble clicking the "Verify Email Address" button, copy and paste the URL below into your web browser: [http://127.0.0.1:8000/email/verify/6/1107c7572edff3d7050bd4c68404ff6d0919d508?expires=1598068938&signature=a52ea1e97b368ac4b68dd2183cd3ff84d121b608556673e01c6a1aa2a5715161](http://127.0.0.1:8000/email/verify/6/1107c7572edff3d7050bd4c68404ff6d0919d508?expires=1598068938&signature=a52ea1e97b368ac4b68dd2183cd3ff84d121b608556673e01c6a1aa2a5715161) © 2020 Laravel. All rights reserved.
-
みなさんのlogファイルの「Verify Email Address」の後に書かれたURLにアクセスする。(本記事のリンクは筆者の環境の物なのでアクセスしても正常な処理にならない。)
-
下記の様なページが表示されたらメールアドレスの確認が完了し初回ログインも完了である。
-