我的User
模型可能是匿名(例如,没有注册电子邮件,$user->isAnonymous()
)。通过使用api.auth
中间件,匿名和完全注册的用户可以访问给定路由。现在我想限制路由,以便匿名用户无法访问它。
(重要的是要注意“匿名用户”仍然经过身份验证,匿名 不引用未经身份验证的身份)
问题是,我应该在哪里放置这个逻辑以最好地符合Dingo包?我是在考虑制作自己的中间件,扩展Dingo,还是为Dingo制作自定义提供商?
奖金问题:我认为最好的结果是只有一个中间件(例如api.auth
)只授权那些非匿名的用户,而第二个中间件(例如auth.all
)授权匿名和非匿名用户。
答案 0 :(得分:1)
我会选择像这样的嵌套中间件
Route::group(['middleware' => 'auth:api'], function(){
Route::get(...); //all authenticated users can see this
Route::group(['middleware' => 'known'], function() {
//assuming the middleware name is 'known' in kernel.php
Route::get(....); //Only known users (non-anonymous) will get in here
});
});
对于你可以做的中间件
public function handle($request, Closure $next)
{
if (Auth::check()){
if(!Auth::user()->email) {
return redirect('/'); //no email. kick them out!
}
}
return $next($request);
}
或类似的东西。