更改Laravel 5.7的电子邮件验证错误消息

4
我正在使用Laravel 5.7的电子邮件验证,当我尝试登录时,会显示如下信息:您的电子邮件地址未经过验证
http://joxi.ru/n2YqYJaIo1XGO2 我需要将此消息翻译成其他语言,但无法找到在哪里更改。在resources/lang目录中,有验证和其他消息,但无法找到这个消息。谢谢。
3个回答

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++的文件查找功能,扫描了我的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更新也会撤销此更改,因此你必须重新编写它,现在有一个更好的解决方案在本答案的顶部。


0
在您的 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);
    }

但是如果我更新Composer,这些更改会被覆盖吗? - Rakesh K
1
@TrueCode 正确。您最好编写一个自定义中间件来模拟此功能,并在 app/Http/Kernel.php 中交换路由中间件数组中的位置。 - Tomy Smith

0

正如其他人所说,您可以直接覆盖文件,但是当 Laravel 更新时,Composer 将覆盖此文件。

您应该创建一个新的中间件类,并将 EnsureEmailIsVerified 类的内容放入其中,然后更改 app/Http/Kernel.php 文件中 'verified' 中间件的声明:

protected $routeMiddleware = [
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    // change to:
    'verified' => \Your\Custom\Middleware::class,
];

你甚至可以使用语言文件来制作中止消息,以便将来进行更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接