Middleware “EnsureEmailIsVerified” 不起作用?

之前在email认证阶段,生成了一个middleware叫做“EnsureEmailIsVerified”,并且在$middlewareGroups里面进行了注册,但是为什么对未进行email认证的用户在UsersController里面不起作用呢?
举个例子,http://larabbs.test/users/2 此用户目前未进行email认证,按照middleware里面的判断条件, 此时应该将用户跳转到 route('verification.notice'),但是实际上可以看到用户的信息。请指教,谢谢。

$request->user() => true
!$request->user()->hasVerifiedEmail() => true
!$request->is('email/*', 'logout') => true

file

file

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 3

这个中间件是认证邮箱,当访问链接 http://larabbs.test/email/verify ,才会出现提示,而这个链接 http://larabbs.test/users/2 是跳转到用户 2 的个人页面。

5年前 评论

@sunnylin 谢谢sunny,还是有几个疑惑,
(1)http://larabbs.test/email/verify 这个连接的控制器对应的是Controllers/Auth/VerificationController.php,在这个class的构造方法里,使用了如下三个middlewares,
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');

可是定义在$middlewareGroups里面的中间件是如何触发的呢?

protected $middlewareGroups = [
'web' => [
..........
\App\Http\Middleware\EnsureEmailIsVerified::class,
],
];
(2)根据文档,Route middleware can be used to only allow verified users to access a given route. Laravel ships with a verified middleware, which is defined at
Illuminate\Auth\Middleware\EnsureEmailIsVerified
Since this middleware is already registered in your application's HTTP kernel, all you need to do is attach the middleware to a route definition:
既然这个middleware已经被存在了(看了代码,和教程里的校验逻辑基本一样),为什么还要再次定义一个逻辑一样的middleware?
(3)按照对文档的理解,$middlewareGroups里面'web'对应的middlewares已经自动应用在了routes/web.php上,也就是说,凡是定义在这个文件里的路由,都会自动应用'web'对应的中间件,那么EnsureEmailIsVerified这个中间件就应该适用于所有在web.php下定义的路由,而不仅仅是/email/verify,我的理解对么?
如果我的理解没有问题,那么我的最开始的问题也就成立了,http://larabbs.test/users/2 如果此用户未经过email认证,那么打开这个URL就应该看到未认证的提示。
file

5年前 评论

认真阅读这个邮箱认证的内容:邮箱认证《L02 Laravel 教程 - Web 开发实战进阶 ( Laravel 5.7 )》
1、因为在 user 模型中使用了邮箱验证,所以能够检测邮箱

file
2、虽然验证代码是相同的,重写可以在不影响原来的验证方法的同时,可以自定义自己的验证
3、如果在页面上需要认证邮箱,需要开启强制用户认证

![Uploading file...]()

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!