Laravel 6错误:页面未重定向到定义的路由

时间:2020-02-11 07:25:23

标签: php laravel authentication web laravel-5

我已经在这里停留了一段时间。我希望我能清楚地解释这个问题。我正在尝试为管理员和用户创建单独的页面。为此,我创建了一个管理中间件。现在,当我登录时,它会将我重定向到同一页面,即管理员或用户。我希望它在管理员登录时转到管理仪表板,而在用户登录时转到用户主目录。希望问题解决。 这是 AdminMiddleware 代码:

public function handle($request, Closure $next)
    {
      if(Auth::user()->user_type == 'admin') //If usertype is admin
    {
       return $next($request);
    }
    else {
        return redirect('home');
    }
    }

以下是路线代码:

    Route::get('/','HomeController@index');
//For Admin
Route::group(['middleware' => ['auth','admin']], function() {

Route::get('/admin','HomeController@home_page');
Route::get('/users-list', 'UserController@users_list');

});

这是 HomeController 代码:

public function index()
    {
return view('home', compact('currantWorkspace'));
}

我已将中间件路径添加到 kernel.php 文件。

如有需要,我很乐意提供其他详细信息。任何解决方案/建议都将受到高度赞赏。

修改

我已经尝试过了,但是仍然存在。

    protected function redirectTo(){
  if (Auth::user()->user_type != 'admin') {
    return 'admin';
    //return redirect('/admin');
  }
  else {
    return 'home';
    //return redirect('/');
  }

}

我认为 redirectTo 功能不起作用,或者没有检查if / else条件

3 个答案:

答案 0 :(得分:0)

如下更改路线。

Route::get('/','HomeController@index')->name('home');
Route::group(['middleware' => ['auth','admin']], function() 
{
Route::get('/admin','HomeController@home_page')->name('admin.home');
Route::get('/users-list', 'UserController@users_list');
});

将中间件中的重定向语句更改为

public function handle($request, Closure $next)
{
if(Auth::user()->user_type == 'admin') //If usertype is admin
{
   return $next($request);
}
else 
{
   return redirect()->route('home');
   OR
   return redirect('/');
}
}

答案 1 :(得分:0)

为什么不在登录函数中创建“ if,else”语句?

if(Auth::user()->user_type == "Admin"){
    return Redirect::route('dashboard'); 
}else if(Auth::user()->user_type == "Standard User"){
    return Redirect::route('home');
}

答案 2 :(得分:0)

目前存在一些问题,关键是在任何人尝试登录时都不会调用您定义的中间件。

要使其正常运行,我认为您只需将其添加到LoginController.php

    protected function authenticated()
    {
        if (Auth::user()->user_type == 'admin') {
            return redirect('dashboard');
        }

        return redirect('home');
    }

此方法基本上告诉laravel用户登录后要做什么。