如果用户不是管理员,如何验证路由?

时间:2019-10-08 09:32:52

标签: laravel laravel-5 routes laravel-5.8

//This is the middle ware
public function handle($request, Closure $next)
{

        if(auth()->user()->isAdmin())   //isAdmin is a function in the User model which checks if the user is admin or not
        {
            return redirect('/admin');
        } else {
            return redirect('/home');
        }

    return $next($request);
}
//I already registered this middleware in kernel as well as verifyUser

Route::middleware(['auth', 'verifyUser'])->group(function() { 

Route::get('/home', 'HomeController@index')->name('home');

Route::get('/admin', 'AdminController@index')->name('admin');

Route::get('/users/profile', 'UserController@view')->name('users.view-profile');

Route::get('/users/edit_profile', 'UserController@edit')->name('users.edit-profile');
});

这里的主要问题是它在浏览器中显示此错误 页面无法正确重定向

Firefox已检测到服务器正在以永远无法完成的方式重定向对此地址的请求。

有时可能是由于禁用或拒绝接受Cookie引起的。

1 个答案:

答案 0 :(得分:0)

您要告诉Laravel将管理员重定向到/admin,将非管理员重定向到/home

不过,您也已经对该中间件制作了/admin/home 主题,因此,当用户访问/home时,会将它们重定向到{ {1}}(一次又一次,一次又一次,直到永远)。

您可能需要进行两项更改:

  • 一种新的中间件,仅将 应用于管理路由,它仅将非管理员重定向到那些路由之外。
  • 将您的家庭/管理员逻辑作为一次性的登录后步骤,而不是在每次浏览量中都放置。请参阅身份验证文档的path customization section