"guest" 类型用户的中间件,使用 Dingo API

Middleware for "guest" type user, using Dingo API

我的 User 模型可能是 匿名的 (例如,没有注册电子邮件,$user->isAnonymous())。通过使用 api.auth 中间件,匿名 和完全注册的用户都可以访问给定的路由。现在想限制一个路由,让匿名用户无法访问

(重要的是要注意“匿名用户”仍然经过身份验证,匿名 没有指未认证)

问题是,我应该把这个逻辑放在哪里才能最好地符合 Dingo 包?我是在考虑制作自己的中间件、扩展 Dingo,还是为 Dingo 创建自定义提供程序?

奖金问题:我认为最好的结果是有一个中间件(例如api.auth)只授权那些非匿名用户,第二个中间件(例如auth.all)授权匿名非匿名用户。

我会选择这样的嵌套中间件

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);
}

或类似的东西。