Странное поведение промежуточного программного обеспечения Laravel 5

Я работаю с Laravel 5.1, и я давно искал ответ на эту проблему, но мне это не удалось.

Проблема возникает, когда суперадминистратор пытается войти в систему. Весь процесс входа в систему реализован в AJAX, поэтому при входе в систему AJAX ожидает URL-адреса перенаправления, в то время как процесс аутентификации выполняется контроллером аутентификации.

Если запрос в порядке, URL-адрес панели управления отправляется обратно в ajax, НО промежуточное ПО выводит меня из системы после выполнения перенаправления.

Auth WelcomeController для проверки суперадминистратора выглядит следующим образом (он отлично работает, доставляя правильный URL-адрес перенаправления):

\Config::set('auth.model', 'App\Super_Admin');

    $sadmin = \Auth::createEloquentDriver();

    \Auth::setProvider($sadmin->getProvider());

    //Admin verification
    if(\Auth::attempt(['system_admin_user' => $request->username, 'password' => $request->password])) {

        \Auth::user()->setAttribute('profile','SuperAdmin');
        \Session::set('sadmin_name',\Auth::user()->system_admin_fullname);

        return response()->json(['login_status' => 'success', 'redirect' => 'SuperAdmin/dashboard', 'error' =>'']);
    }
    else {
        return response()->json(['login_status' => 'invalid', 'error' => 'Usuario y/o password invalidos', 'redirect' => '/']);
    }

Функция обработки запросов в промежуточном программном обеспечении is_admin выглядит следующим образом (работает не так, как задумано):

public function handle($request, Closure $next)
{

if(\Auth::check() && \Auth::user()->profile == "SuperAdmin") {
        return redirect('/');
}
else {
    return response('Unauthorized.', 401);
}

return $next($request);
}

Я также пробовал использовать другой код промежуточного программного обеспечения:

public function handle($request, Closure $next)
{
   if(!\Auth::check() || \Auth::user()->profile != "SuperAdmin") {
       $this->auth->logout();
   }

   return $next($request);
}

Группа маршрутов, защищенная для администратора, определяется следующим образом:

Route::group(['middleware' => ['auth','is_superAdmin']], function() {
Route::get('SuperAdmin/dashboard','Super_Admin\SuperAdminController@index');
});

Заранее спасибо!


person Kragan    schedule 16.05.2017    source источник


Ответы (1)


Интересно, проблема в том, что:

\Auth::user()->setAttribute('profile','SuperAdmin');

не сохраняется.

Вероятно, вы действительно не хотите устанавливать / изменять это поле в записи БД. Возможно, вы действительно хотите просто установить переменную сеанса, указывающую, что пользователь является SuperAdmin.

person barryp    schedule 16.05.2017
comment
Привет, Баррип. Я уже пробовал с сессиями, и нет никакой разницы в поведении, объясненном ранее. - person Kragan; 17.05.2017