“客户”类型用户的中间件,使用Dingo API

时间:2017-03-08 23:34:13

标签: php laravel laravel-5.4 dingo-api

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

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

问题是,我应该在哪里放置这个逻辑以最好地符合Dingo包?我是在考虑制作自己的中间件,扩展Dingo,还是为Dingo制作自定义提供商?

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

1 个答案:

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

或类似的东西。