OctoberCMS: как проверить, авторизовался ли пользователь на всех страницах

Я использую следующий код (в разделе кода страницы) для перенаправления пользователей на страница входа, если они не вошли в систему:

function onStart()
{
    $user = $this->account->user();
    if(!$user)
    {
        return Redirect::to('/login');
    }
}

Как я могу избежать этого на каждой странице и выполнять эту проверку в одном месте для всех страниц, которым требуется аутентификация?


person B Faley    schedule 02.03.2017    source источник


Ответы (4)


Вы можете использовать Session Component, как было предложено, но тогда вам понадобятся два макета:

а) Макет для зарегистрированных пользователей >> Добавьте компонент сеанса в этот макет и установите security = "user" с опцией перенаправления

б) Макет для общедоступных страниц ( незарегистрированных ) >> Добавить еще один компонент сеанса >> security = "guest"

Другим вариантом может быть создание промежуточного программного обеспечения для этих маршрутов;

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


    App::before(function () {

        if (App::runningInBackend() || App::runningInConsole()) {
            return;
        }

        if ( !Auth::getUser() ) {

              return Redirect::to('/login');
        }


    });

    return $next($request);
}

Будьте проще, если вы используете плагин RainLab и вам просто нужно проверить, вошел ли пользователь в систему, компонент сеанса выполнит эту работу.

person Raja Khoury    schedule 03.03.2017

вы не можете использовать компонент сеанса? для перенаправления незарегистрированных пользователей.

person user3789803    schedule 02.03.2017
comment
Да, добавьте компонент сеанса либо на каждую страницу, либо, что еще лучше, на макет, используемый всеми страницами, а затем вы можете установить security = "user" и redirect = "login" - person Joseph; 02.03.2017

Вы можете использовать те же функции в макете. Макеты onInit() звучат как хороший вариант.

Подробнее об этом можно прочитать здесь

person dragontree    schedule 02.03.2017
comment
И как применить это только к некоторым страницам? - person B Faley; 02.03.2017
comment
Может быть, вы можете проверить URL или что-то в этом роде? Другой вариант — расширить страницу CMS, добавив дополнительный атрибут, который проверяется для этой цели. - person dragontree; 02.03.2017

Plugin.php имеет функцию boot, которая вызывается при загрузке плагина. Вам нужно будет проверить, не находится ли текущая страница в бэкэнде, иначе вы не сможете войти в CMS без авторизации в интерфейсе. Также проверьте, не входит ли он в систему, потому что это вызовет бесконечные циклы. Этот код должен работать.

public function boot ()
{
    $user = $this->account->user();
    if ( ! $user && ! Request::is('backend/*') && ! Request::is('login') )
    {
        return Redirect::to('/login');
    }
}
person Nathan Bastiaans    schedule 02.03.2017