首页 > 解决方案 > 更改电子邮件验证错误消息 Laravel 5.7

问题描述

我正在使用 Laravel 5.7 电子邮件验证。当我尝试登录时,它说 - Your email address is not verified
http://joxi.ru/n2YqYJaIo1XGO2 我需要将此消息更改为另一种语言,但找不到更改的位置。在资源/语言中 - 有验证和其他消息,但找不到这个。谢谢。

标签: phplaravellaravel-5

解决方案


更好的解决方案,改用这个。


您必须实现一个自定义中间件,您可以使用 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 项目中的所有文件:“您的电子邮件未验证”

它想出了一场比赛:

\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 更新将恢复此更改,因此您将不得不重写它,现在这个答案的顶部有一个更好的解决方案。


推荐阅读