Laravel 5中的身份验证:根据用户类型将访问者重定向到不同的页面?

时间:2016-07-08 07:42:07

标签: php laravel authentication laravel-5

我一直在尝试让middleware根据用户的类型执行不同的任务。

这是一个路线组。

Route::group(array('prefix' => 'api', 'middleware' => 'admin'), function () {
    Route::resource('animal', 'AnimalController');
    //Other resources
});

我的User模型有两种类型,可以通过以下方式访问。

$this->user()->user_type_id;

Following this advice,我正在尝试此任务,handle中的App\Http\Middleware\Authenticate功能现在看起来就是这样。

 public function handle($request, Closure $next)
{
    if ($this->auth->guest()) {
        if ((Auth::user()->user_type_id == 2) {
            //If the user is of type 2, this will be triggered
            if ($request->ajax()) {
                return response('You are type 2.', 401);
            }
            //Maybe there are other libes here
        } else if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('auth/login');
        }
    }
    return $next($request);
}

我认为当用户访问前缀为response('You are type 2.', 401)的网址时,这会导致类型2的用户获得api/animal,但我在响应中看到了一条消息Unauthorized.

是否可以让身份验证中间件以这种方式工作? 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

if ($this->auth->guest()) {
    if ($request->ajax()) {
        return response('Unauthorized.', 401);
    } else {
        return redirect()->guest('auth/login');
    }
} else if ($this->user()->user_type_id == 2) {
    //If the user is of type 2, this will be triggered
    return response('You are type 2.', 401);
}

试试这个。