簡體   English   中英

更改電子郵件驗證錯誤消息 Laravel 5.7

[英]Change email verification error message Laravel 5.7

我正在使用 Laravel 5.7 電子郵件驗證。 當我嘗試登錄時,它說 - Your email address is not verified
http://joxi.ru/n2YqYJaIo1XGO2我需要將此消息更改為另一種語言,但找不到更改的位置。 在資源/語言中 - 有驗證和其他消息,但找不到這個。 謝謝。

更好的解決方案,請改用它。


您必須實現一個可以使用 artisan 命令創建的自定義中間件:

php artisan make:middleware EnsureEmailIsVerified

確保EmailIsVerified.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 並掃描了我的 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, 'Your email address is not verified.')

任何你想要的錯誤是,例如: ? abort(403, 'Please, verify your email.') ? abort(403, 'Please, verify your email.')

它會顯示那個。 (如果您嘗試,請確認這一點)。


此解決方案存在一個小問題。 由於您的.gitignore文件告訴 git 忽略供應商文件夾,因此在推送時不會將其推送到外部存儲庫。

您將需要更改.gitignore文件。

Laravel 更新將恢復此更改,因此您必須重寫它,現在此答案的頂部有一個更好的解決方案。

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

您可以像其他人所說的那樣直接覆蓋該文件,但是當 Laravel 更新時,該文件將被 Composer 覆蓋。

您應該使用EnsureEmailIsVerified類的內容創建一個新的 Middleware 類,並更改app/Http/Kernel.php文件中“已驗證”中間件的聲明:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM