Тема: Авторизация

Подскажите как лучше реализовать
нужно сделать чтобы доступ к каталогу был только у авторизованных пользователей
(образно при обращении не залогиненного пользователя к любой странице нужно перекинуть его на форму авторизации)
сделать отдельный модуль с проверкой есть ли у данного посетителя user.id ?

Повысить оценку Понизить оценку

Re: Авторизация

user.id есть всегда. У не авторизаванного он просто отрицательный. Конечно нужно отдельный модуль. Но он будет достаточно простой.

if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы
    Header('Location: /auth/'); //Редирект
    exit();
}

Хук можно использовать getroute или start.
https://readyscript.ru/dev-manual/dev_hooks.html

3 Отредактировано Никита (14.11.2016 20:01:19)

Re: Авторизация

Закусило Александр пишет:

user.id есть всегда. У не авторизаванного он просто отрицательный. Конечно нужно отдельный модуль. Но он будет достаточно простой.

if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы
    Header('Location: /auth/'); //Редирект
    exit();
}

Хук можно использовать getroute или start.
https://readyscript.ru/dev-manual/dev_hooks.html

сделал при помощи хука start отдельным модулем как Вы сказали
сайт вернул: Сайт testsite.test выполнил переадресацию слишком много раз.
подскажите как сделать?

Повысить оценку Понизить оценку

Re: Авторизация

У Вас делает переадресацию на страницу и на ней зацикливается, переадресовываясь на себя.
Сделайте проверку, находитесь ли на странице или нет и если нет, то только тогда переадресовывайте.

5 Отредактировано Закусило Александр (15.11.2016 11:56:55)

Re: Авторизация

Ну правильно. ОН говорит у Вас, что переадресация у Вас бесконечная. Вы же просто проверили, что он не авторизован и постоянно перенаправляете. Надо же ещё предварительно проверить на какой странице вы находитесь. Если /auth/, то редирект соответственно не нужен. В остальных случаях перенаправляем. Если нужна регистрация, то её адрес тоже надо проверить.

Re: Авторизация

Можно проверить например так:

if (\RS\Router\Manager::getCurrentRoute()->getId() == 'users-front-auth'){ //Проверяем маргрут на /auth/

}

По идее должно помочь

7

Re: Авторизация

Спасибо, помогло
Еще вопрос, нужно сделать страницу авторизации видоизмененную, убрать остальные элементы дизайна и т.д.
образно сделать из страницы авторизации "лендинг"
Опять же вопрос как будет более верно это сделать?

Повысить оценку Понизить оценку

8 Отредактировано Закусило Александр (17.11.2016 12:20:02)

Re: Авторизация

Добавьте страницу авторизации у себя в конструкторе сайта и правьте. И перегрузите шаблон страницы авторизации поместив себе в тему.
Смотрите статью:
http://readyscript.ru/text-blog/Kak-soz … adyScript/

Re: Авторизация

Закусило Александр пишет:

user.id есть всегда. У не авторизаванного он просто отрицательный. Конечно нужно отдельный модуль. Но он будет достаточно простой.

if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы
    Header('Location: /auth/'); //Редирект
    exit();
}

Хук можно использовать getroute или start.
https://readyscript.ru/dev-manual/dev_hooks.html

Подскажите что необходимо поправить чтоб заработал модуль. Установил его, но ридеректа нету.
Файлы handlers.inc.php

namespace RedirectGuest\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this->bind('start');
    }
    
    public static function start()
    {
        if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы
    Header('Location: /auth/'); //Редирект
    exit();
}
    }
}

file.inc.php

<?php
namespace RedirectGuest\Config;
use \RS\Orm\Type;
//Класс конфигурации модуля. Будет полностью наследовать стандартное поведение конфигурационного класса
class File extends \RS\Orm\ConfigObject
{
    
}

Повысить оценку Понизить оценку

Re: Авторизация

Владислав пишет:
Закусило Александр пишет:

user.id есть всегда. У не авторизаванного он просто отрицательный. Конечно нужно отдельный модуль. Но он будет достаточно простой.

if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы
    Header('Location: /auth/'); //Редирект
    exit();
}

Хук можно использовать getroute или start.
https://readyscript.ru/dev-manual/dev_hooks.html

Подскажите что необходимо поправить чтоб заработал модуль. Установил его, но ридеректа нету.
Файлы handlers.inc.php

namespace RedirectGuest\Config;
class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this->bind('start');
    }
    
    public static function start()
    {
        if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы
    Header('Location: /auth/'); //Редирект
    exit();
}
    }
}

file.inc.php

<?php
namespace RedirectGuest\Config;
use \RS\Orm\Type;
//Класс конфигурации модуля. Будет полностью наследовать стандартное поведение конфигурационного класса
class File extends \RS\Orm\ConfigObject
{
    
}

Ну вообще в этот хук заходит? Вы пробовали выводить, что нибудь? Например var_dump('111');exit();

11 Отредактировано Владислав (30.06.2021 14:01:04)

Re: Авторизация

Поменял вместо редиректа - var_dump('111');exit();
После очитки кэша выводит что на картинке https://cdn1.savepice.ru/uploads/2021/6 … f-full.jpg при первой загрузки. Потом обычная главная страница. Авторизован или нет не меняет ситуацию сначала что на картинки потом обычная страница.

Повысить оценку Понизить оценку

Re: Авторизация

А вы какой адрес-то запрашиваете? Такое чувствыо что картинку. Как буд-то у Вас PHP вообще не установлен

Re: Авторизация

Главная страница сайта так открывается после очистки кеша
http://tehnodemo2.cf/   пустой демо сайт

Повысить оценку Понизить оценку

Re: Авторизация

Владислав пишет:

Главная страница сайта так открывается после очистки кеша
http://tehnodemo2.cf/   пустой демо сайт

Я имел ввиду, адрес с которого должно переадресовываться и у Вас получаются такие значения.

15 Отредактировано Владислав (07.07.2021 18:37:23)

Re: Авторизация

Закусило Александр пишет:

А вы какой адрес-то запрашиваете? Такое чувствыо что картинку. Как буд-то у Вас PHP вообще не установлен

Всё оказалось намного проще и смешнее smile. Тупо скопировал без <?php в начале.
Редирект работает c зацикливанием. В паре с проверкой маршрута на /auth/ ошибка

Исключение - "Call to a member function getId() on null"
Код ошибки:    0
Тип ошибки:    Error
Файл:    /var/www/tehnodemo2.cf/data/www/tehnodemo2.cf/modules/redirectguest/config/handlers.inc.php
Строка:    16
Стек вызова:    
#0 [internal function]: RedirectGuest\Config\Handlers::start(NULL, Object(RS\Event\Event))
#1 /var/www/tehnodemo2.cf/data/www/tehnodemo2.cf/core/rs/event/manager.inc.php(217): call_user_func(Array, NULL, Object(RS\Event\Event))
#2 /var/www/tehnodemo2.cf/data/www/tehnodemo2.cf/index.php(23): RS\Event\Manager::fire('start')
#3 {main}

Вот сам файл

<?php
namespace RedirectGuest\Config;
class Handlers extends \RS\Event\HandlerAbstract

{
    function init()
    {
        $this->bind('start');
    }
    
    public static function start() {

if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы


if (!\RS\Router\Manager::getCurrentRoute()->getId()  == 'users-front-auth'){ //Проверяем маргрут на /auth/

 Header('Location: /auth/'); //Редирект
    exit();

}

}

  }
}

Повысить оценку Понизить оценку

Re: Авторизация

Замените

\RS\Router\Manager::getCurrentRoute()->getId() 

на

$_SERVER['REQUEST_URI']

Re: Авторизация

<?php
namespace RedirectGuest\Config;
class Handlers extends \RS\Event\HandlerAbstract

{
    function init()
    {
        $this->bind('start');
    }
    
    public static function start() {

if (!\RS\Application\Auth::isAuthorize()){ //Если не авторизованы

if ($_SERVER['REQUEST_URI']  !== 'users-front-auth'){ //Проверяем маргрут на /auth/


Header('Location: /auth/'); //Редирект
exit();

}

}

  }
}

Не помогло. Сайт выполнил переадресацию слишком много раз.

Повысить оценку Понизить оценку

18 Отредактировано Закусило Александр (19.07.2021 12:29:56)

Re: Авторизация

Вы не поняли

if ($_SERVER['REQUEST_URI']  !== '/auth/'){ 

Re: Авторизация

Теперь работает. Спасибо!

Повысить оценку Понизить оценку