簡體   English   中英

如何在Laravel 5.4中使用中間件身份驗證重定向到管理頁面?

[英]How to redirect to admin page with middleware auth in 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);
   }
 }

我記得我的情況。 我創建了一個中間件,並在其中檢查了$ 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

在您的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');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM