こんばんは、のるぼるのんです。
前回は、Laravel5.7で追加されたユーザー登録時のEmail認証機能の実装について紹介しました。
認証待ちページは簡単に日本語化出来るんですけど、認証メールの方が結構面倒臭いみたいなんですよねー。
ということで、今回は認証待ちページと、認証メールの日本語化について解説します。
認証待ちページ
こちらは簡単です。resource/views/auth/verify.blade.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 |
@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 このページを閲覧するには、Eメールによる認証が必要です。 もし認証用のメールを受け取っていない場合、<a href="{{ route('verification.resend') }}">こちらのリンク</a>をクリックして、認証メールを受け取ってください。 </div> </div> </div> </div> </div> @endsection |
出来ました。viewが用意されているので、チョロいですね。
認証用Email
こっちが若干厄介です。Userモデルで、通知に関する関数をオーバーライド、Notificationクラスを作成します。
・Notification 追加
1 |
php artisan make:notification EmailVerificationJa |
・Vendor Publish
1 2 |
php artisan vendor:publish --tag=laravel-notification // ここでも結構日本語化します php artisan vendor:publish --tag=laravel-mail // markdownメールを編集する際に使用。今回は作成のみ |
・EmailVerificationJa.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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<?php namespace App\Notifications; use Illuminate\Notifications\Notification; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Support\Carbon; // 追記 use Illuminate\Support\Facades\URL; // 追記 class EmailVerificationJa extends Notification { public static $toMailCallback; // 追記 /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { if (static::$toMailCallback) { return call_user_func(static::$toMailCallback, $notifiable); } return (new MailMessage) ->subject('ユーザー認証メール') ->line('下記のボタンをクリックして、ユーザー認証を完了してください。') ->action( '認証', $this->verificationUrl($notifiable) ) ->line('本メールに心当たりのない場合、メールを破棄するか、お問い合わせフォームよりご確認ください。'); } protected function verificationUrl($notifiable) { return URL::temporarySignedRoute( 'verification.verify', Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()] ); } public static function toMailUsing($callback) { static::$toMailCallback = $callback; } } |
・User.php編集
1 2 3 4 |
public function sendEmailVerificationNotification() // 追記 { $this->notify(new EmailVerificationJa); } |
resources/views/vendor/notifications/email.blade.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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
@component('mail::message') {{-- Greeting --}} @if (! empty($greeting)) # {{ $greeting }} @else @if ($level == 'error') # @lang('Whoops!') @else こんばんは! @endif @endif {{-- Intro Lines --}} @foreach ($introLines as $line) {{ $line }} @endforeach {{-- Action Button --}} @isset($actionText) <?php switch ($level) { case 'success': case 'error': $color = $level; break; default: $color = 'primary'; } ?> @component('mail::button', ['url' => $actionUrl, 'color' => $color]) {{ $actionText }} @endcomponent @endisset {{-- Outro Lines --}} @foreach ($outroLines as $line) {{ $line }} @endforeach {{-- Salutation --}} @if (! empty($salutation)) {{ $salutation }} @else よろしくお願い致します,<br>のるぼるのるの @endif {{-- Subcopy --}} @isset($actionText) @component('mail::subcopy') @lang( "認証ボタンより遷移できない場合、下記URLから認証をお試しください". '[:actionURL](:actionURL)', [ 'actionText' => $actionText, 'actionURL' => $actionUrl ] ) @endcomponent @endisset @endcomponent |
メールを送信してみます。
日本語化できました。
なんかMailAble機能とかでもっと簡単に、且つわかりやすくかける気がしますが、今回はこんなもんでしょう。
待ち画面より送信内容の方を自由にいじらせてくれよな〜Laravelさんよう〜
コメントを書く