如何在Laravel 8中实现自定义邮箱验证,解决verification.verify路由未定义报错
报错原因
你在路由组中同时使用了Laravel自带的verified邮箱验证中间件,该中间件依赖Laravel默认的邮箱验证路由体系,需要存在命名为verification.verify的路由才能正常生成验证链接、完成跳转逻辑,你未定义该路由所以触发报错。
解决方法
方案1:完全使用自定义邮箱验证逻辑(适配你已经写好的WereEmailVerified中间件)
你已经自行实现了验证判断中间件,不需要用到Laravel自带的验证体系,直接修改路由组的中间件配置即可:
- 先确认你已经在
app/Http/Kernel.php的$routeMiddleware数组中注册了自定义中间件的别名,示例:
protected $routeMiddleware = [ // 其他中间件 'email.verified' => \App\Http\Middleware\WereEmailVerified::class, ];
- 修改web.php中的路由组配置,删掉自带的
verified中间件,替换成你自己注册的中间件别名:
Route::group(['middleware' => ['auth','email.verified']], function() { // 你的路由 });
方案2:保留Laravel自带邮箱验证能力
如果需要用到Laravel默认的验证通知、验证链接生成等能力,直接在web.php中注册默认的邮箱验证路由即可:
// 放在路由定义最前面即可 Auth::routes(['verify' => true]);
这行代码会自动生成verification.verify等邮箱验证相关的命名路由,满足自带verified中间件的依赖要求。
注意事项
- 你的自定义中间件返回提示存在拼写错误:
Verif改为Verify,ACCESS改为Access即可。 - 如果完全走自定义验证逻辑,不要使用Laravel默认的
VerifyEmail通知类,该类会自动生成指向verification.verify路由的链接,未定义该路由时同样会触发报错,你需要自行实现验证通知类,生成指向你自定义验证处理接口的链接。
内容的提问来源于stack exchange,提问作者Young L.
相关产品推荐
相关产品推荐

