使用Laravel 7.19
我的所有路由都需要区域设置,包括我的身份验证路由,以支持不同的语言。我已经为用户激活了电子邮件验证。
因此,一旦用户没有验证他的电子邮件,试图打开我网站上需要电子邮件验证的部分,Laravel会自动将他们重定向到这个路径: verification.notice
问题是路由需要locale参数,但我不知道如何将locale传递给路由。所以我收到了这个错误信息
Missing required parameters for [Route: verification.notice] [URI: {locale}/email/verify]. 有人知道将我重定向到路由的函数: verification.notice吗?因为我需要调整或覆盖它,以便将locale参数传递给它。
我的web.php
Route::group(['middleware' => ['setlocale'],'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function() {
Auth::routes(['verify' => true]);
});编辑:找到一些有用的东西。文件/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php内部
有一个函数句柄
如果我将app()->getLocale()添加到其中,错误消息就会消失。现在看起来像这样
public function handle($request, Closure $next, $redirectToRoute = null)
{
if (! $request->user() ||
($request->user() instanceof MustVerifyEmail &&
! $request->user()->hasVerifiedEmail())) {
return $request->expectsJson()
? abort(403, 'Your email address is not verified.')
: Redirect::route($redirectToRoute ?: 'verification.notice',app()->getLocale());
}
return $next($request);
}但我不认为你应该改变/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php
如何正确覆盖此函数?
发布于 2020-07-12 21:31:57
听起来您必须复制中间件代码并以这种方式对其进行修改。只需从vendor目录复制Illuminate\Auth\Middleware\EnsureEmailsVerified.php的代码(顺便说一句,您永远不要编辑它自己),在App\Http\Middleware中创建一个新的中间件并将其添加到App\Http\Kernel中。
您看到的verification.notice路由是使用Auth::routes(['verify' => true]); (它的一部分,一组用于身份验证/验证的默认路由)添加的,如下所示:https://github.com/laravel/ui/blob/2.x/src/AuthRouteMethods.php#L84 (它是laravel/ui包的一部分)。
https://stackoverflow.com/questions/62861096
复制相似问题