您的电子邮件地址未经过验证
http://joxi.ru/n2YqYJaIo1XGO2 我需要将此消息翻译成其他语言,但无法找到在哪里更改。在resources/lang目录中,有验证和其他消息,但无法找到这个消息。谢谢。
您的电子邮件地址未经过验证
您需要实现一个自定义中间件,可以使用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++的文件查找功能,扫描了我的Laravel项目中的所有文件,搜索了"Your email is not verified"。
结果在这个文件中找到了一个匹配项:
\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忽略vendor文件夹,当推送到外部repo时,它不会被推送。
你需要更改.gitignore
文件。
Laravel更新也会撤销此更改,因此你必须重新编写它,现在有一个更好的解决方案在本答案的顶部。
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
类的内容放入其中,然后更改 app/Http/Kernel.php
文件中 'verified' 中间件的声明:
protected $routeMiddleware = [
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
// change to:
'verified' => \Your\Custom\Middleware::class,
];
app/Http/Kernel.php
中交换路由中间件数组中的位置。 - Tomy Smith