【问题标题】:Change email verification error message Laravel 5.7更改电子邮件验证错误消息 Laravel 5.7
【发布时间】:2021-01-06 21:28:22
【问题描述】:

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

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

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


    您必须实现一个可以使用 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 更新会恢复此更改,因此您必须重写它,现在这个答案的顶部有一个更好的解决方案。

    【讨论】:

      【解决方案2】:

      在您的 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 ,这些更改会被覆盖吗?
      • @TrueCode 正确。您最好编写一个自定义中间件来模仿此功能,并将其交换到app/Http/Kernel.php 的路由中间件数组中。
      【解决方案3】:

      你可以像其他人所说的那样直接覆盖文件,但是当 Laravel 更新时,这个文件会被 Composer 覆盖。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-21
        • 2019-03-05
        • 1970-01-01
        • 2019-03-05
        • 2023-03-28
        • 2019-03-04
        • 2019-03-25
        • 1970-01-01
        相关资源
        最近更新 更多