[英]Change email verification error message Laravel 5.7
我正在使用 Laravel 5.7 電子郵件驗證。 當我嘗試登錄時,它說 - Your email address is not verified
http://joxi.ru/n2YqYJaIo1XGO2我需要將此消息更改為另一種語言,但找不到更改的位置。 在資源/語言中 - 有驗證和其他消息,但找不到這個。 謝謝。
您必須實現一個可以使用 artisan 命令創建的自定義中間件:
php artisan make:middleware EnsureEmailIsVerified
確保EmailIsVerified.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Contracts\Auth\MustVerifyEmail;
class EnsureEmailIsVerified
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! $request->user() ||
($request->user() instanceof MustVerifyEmail &&
! $request->user()->hasVerifiedEmail())) {
return $request->expectsJson()
? abort(403, 'YOUR CUSTOM ERROR HERE')
: Redirect::route('verification.notice');
}
return $next($request);
}
}
您必須將內核文件中verified
密鑰映射到新的中間件。
app\\Http\\Kernel.php(在底部):
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \App\Http\Middleware\EnsureEmailIsVerified::class, // the changed line
];
我在文件功能中使用了 Notepad++ 的 find 並掃描了我的 Laravel 項目中的所有文件:“您的電子郵件未經驗證”
它想出了一場比賽:
\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified.php
這是哪個文件:
<?php
namespace Illuminate\Auth\Middleware;
use Closure;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Contracts\Auth\MustVerifyEmail;
class EnsureEmailIsVerified
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle($request, Closure $next)
{
if (! $request->user() ||
($request->user() instanceof MustVerifyEmail &&
! $request->user()->hasVerifiedEmail())) {
return $request->expectsJson()
? abort(403, 'Your email address is not verified.')
: Redirect::route('verification.notice');
}
return $next($request);
}
}
我猜如果你改變這一行: ? abort(403, 'Your email address is not verified.')
? abort(403, 'Your email address is not verified.')
任何你想要的錯誤是,例如: ? abort(403, 'Please, verify your email.')
? abort(403, 'Please, verify your email.')
它會顯示那個。 (如果您嘗試,請確認這一點)。
此解決方案存在一個小問題。 由於您的.gitignore
文件告訴 git 忽略供應商文件夾,因此在推送時不會將其推送到外部存儲庫。
您將需要更改.gitignore
文件。
Laravel 更新也將恢復此更改,因此您必須重寫它,現在此答案的頂部有一個更好的解決方案。
在你的 Laravel 應用程序“\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified.php”中遵循這個路徑你會在`
public function handle($request, Closure $next)
{
if (! $request->user() ||
($request->user() instanceof MustVerifyEmail &&
! $request->user()->hasVerifiedEmail())) {
return $request->expectsJson()
? abort(403, 'Your email address is not verified.')
: Redirect::route('verification.notice');
}
return $next($request);
}
您可以像其他人所說的那樣直接覆蓋該文件,但是當 Laravel 更新時,該文件將被 Composer 覆蓋。
您應該使用EnsureEmailIsVerified
類的內容創建一個新的 Middleware 類,並更改app/Http/Kernel.php
文件中“已驗證”中間件的聲明:
protected $routeMiddleware = [
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// change to:
'verified' => \Your\Custom\Middleware::class,
];
您甚至可以使中止消息使用 lang 文件,以便您將來可以更改它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.