Азотная сессия

На всех моих азотных страницах я использую следующую семантику:

main() -> 
case wf:user() /= undefined of 
    true  -> main_authorized();
    false -> wf:redirect_to_login("/login")
end.

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

Заранее спасибо и с уважением


person Arsénio Costa    schedule 14.03.2011    source источник


Ответы (1)


Nitrogen предоставляет разработчику приложения возможность определять и устанавливать модуль обратного вызова авторизации.

Вместо описанной вами логики main/0 в каждом из ваших обработчиков страниц вы можете определить обработчик авторизации, как в следующем Gist, который я написал в феврале: https://gist.github.com/830529

Функция init/2 в определяемом вами модуле обратного вызова security_handler (при условии, что вы подключите его при запуске с помощью nitrogen:handler/2) будет выполняться перед функцией main/0 в вашем обработчике страницы.

Чтобы убедиться, что никакая часть обработчика страницы POST не выполняется, вы должны вызвать wf:status_code/1 с 401 в качестве аргумента. Затем укажите, что соответствующая страница входа обслуживается в ответах 401 в соответствии с конфигурацией вашего веб-сервера.

person Susan Potter    schedule 27.05.2011