首页 文章

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

提问于
浏览
3

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

3 回答

  • 0

    更好的解决方案 - 使用此安装程序


    注意:尚未测试,如果有人测试这个,请告诉我它是否有效 . 它应该,但我想确定

    您必须实现可以使用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
        ];
    

    原始答案


    好吧,所以我想我可能已经想到了你 .

    我在文件功能中使用了记事本的查找并扫描了我的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);
        }
    }
    

    我是 guessing ,如果你改变这一行: ? abort(403, 'Your email address is not verified.')

    对于你想要的任何错误,例如: ? abort(403, 'Please, verify your email.')

    它会显示出来 . (如果你试试,请确认一下) .


    这个解决方案存在一个小问题 . 由于您的 .gitignore 文件告诉git忽略供应商文件夹,因此在推送时不会将其推送到外部仓库 .

    您需要更改 .gitignore 文件 . 我真的知道该怎么做 . 如果有人知道将其添加为评论,我会将其添加到答案中 .

    Laravel更新将 also 还原此更改,因此您必须重写它,现在这个答案的顶部有一个更好的解决方案 .

  • 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);
        }
    
  • 3

    您可以像其他人所说的那样直接覆盖文件,但是当Laravel更新时,Composer会覆盖此文件 .

    您应该使用 EnsureEmailIsVerified 类的内容创建一个新的Middleware类,并更改 app/Http/Kernel.php 文件中'verified'中间件的声明:

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

    您甚至可以使中止消息使用lang文件,以便将来可以更改它 .

相关问题