Как перенаправить на страницу администратора с промежуточным программным обеспечением авторизации в Laravel 5.4? - PullRequest
0 голосов
/ 31 августа 2018

Я борюсь с этим пару дней и не могу понять, что я делаю неправильно.

Я создал форму авторизации. Маршруты находятся под групповым промежуточным программным обеспечением. Когда я пытаюсь войти в систему, он показывает, что я вошел в систему, но я не перенаправлен на свою панель администратора, я возвращаюсь на страницу входа. Я почти уверен, что проблема в промежуточном программном обеспечении, но я не знаю, в чем я не прав.

Мои маршруты:

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

EDIT:

Это значение по умолчанию, оно не изменилось

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

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

В вашем методе 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');
}
0 голосов
/ 31 августа 2018

Я помню, что я сделал в моем случае. Я создал промежуточное ПО и проверил переменную $ guard.

$this->middleware('LoggedIn:admin'); // вызывается в конструкторе MyAdmin, которым были расширены все остальные страницы администратора.

Middleware

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...