【发布时间】:2021-01-06 21:28:22
【问题描述】:
我正在使用 Laravel 5.7 电子邮件验证。当我尝试登录时,它说 - Your email address is not verified
http://joxi.ru/n2YqYJaIo1XGO2
我需要将此消息更改为另一种语言,但找不到更改位置。
在资源/语言中 - 有验证和其他消息,但找不到这个。谢谢。
【问题讨论】:
我正在使用 Laravel 5.7 电子邮件验证。当我尝试登录时,它说 - Your email address is not verified
http://joxi.ru/n2YqYJaIo1XGO2
我需要将此消息更改为另一种语言,但找不到更改位置。
在资源/语言中 - 有验证和其他消息,但找不到这个。谢谢。
【问题讨论】:
您必须实现一个可以使用 artisan 命令创建的自定义中间件:
php artisan make:middleware EnsureEmailIsVerified
EnsureEmailIsVerified.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 in file 功能,扫描了我的 Laravel 项目中的所有文件:“Your email is not verifyed”
它想出了一个匹配:
\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, '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);
}
【讨论】:
app/Http/Kernel.php 的路由中间件数组中。
你可以像其他人所说的那样直接覆盖文件,但是当 Laravel 更新时,这个文件会被 Composer 覆盖。
您应该使用EnsureEmailIsVerified 类的内容创建一个新的中间件类,并更改app/Http/Kernel.php 文件中“已验证”中间件的声明:
protected $routeMiddleware = [
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// change to:
'verified' => \Your\Custom\Middleware::class,
];
您甚至可以使中止消息使用 lang 文件,以便您将来更改它。
【讨论】: