如何在Laravel 5.4中使用中间件身份验证重定向到管理页面?

时间:2018-08-31 14:49:27

标签: php laravel laravel-5.4

几天来我一直在为此苦苦挣扎,但我找不到我做错了什么。

我创建了一个登录表单。路由在组中间件auth下。当我尝试登录时,它表明我已登录,但是没有重定向到管理面板,我将返回登录页面。 我很确定问题出在中间件上,但是我不知道我错了什么。

我的路线:

Route::get('/admin/login','Admin\LoginController@index')->name('login');
Route::post('/admin/loginF','Admin\LoginController@loginF');

Route::group(['middleware' => 'auth'], function()
{
   Route::get('/admin','Admin\DashboardController@index')->name('dashboard');
   Route::get('/admin/logout',function(){
     Auth::logout();
    return redirect('/admin/login/');
   });
});

登录: LoginController类扩展了控制器{

use AuthenticatesUsers;

public function __construct() {
    $this->middleware('guest')->except('logout');
}

public function Index() {
    return view('admin.login');
}

public function loginF(Request $request) {

     $credentials = [
        'username' => $request['username'],
        'password' => $request['password'],
    ];

   if (Auth::attempt($credentials)) {
       return redirect("/admin");
   } else {   
   return Redirect::back()->withErrors("Error Login!");
   }
}
}

在我的DashboardController中,我有

public function __construct() {
    $this->middleware('auth');
}

编辑:

这是默认设置,未更改

  class RedirectIfAuthenticated{
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
           return redirect('/home');
        }
        return $next($request);
   }
 }

2 个答案:

答案 0 :(得分:0)

我记得我的情况。我创建了一个中间件,并在其中检查了$ guard变量。

$this->middleware('LoggedIn:admin'); //在MyAdmin的构造函数中调用,所有其他管理页面都通过该构造函数进行了扩展。

中间件

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check() == false) {
          switch ($guard) {
            case 'client':
              return redirect('/Login');
              break;
            case 'vendor':
              return redirect('/Login');
              break;
            case 'employee':
              return redirect('/Login');
              break;
            case 'admin':
              $output = $this->EmployeeAccess($request);
              if($output['status'] == false){
                return redirect($output['link']);
              }
              break;
            default:
              return redirect('/');
              break;
          }
        }

        return $next($request);
    }

在登录页面上,您应该检查

if($this->guard('admin')->check() === true) // then redirect to admin dashboard

其他用户

 if($this->guard('user')->check() === true) // then redirect to  user dashboard

答案 1 :(得分:0)

在您的loginF方法上:

public function login()
{
    //check if auth passed, if so, redirect to dashboard
    if (Auth::check()) return redirect('/dashboard');

    //if failed, return view to login
    return view('login');
}