2013-07-12 1 views
1

Я нахожусь в центре написания веб-приложения в CherryPy. Я настроил его так, чтобы он использовал OpenID auth и мог успешно получить идентификатор пользователя/адрес электронной почты.Проверка состояния входа на каждую страницу загрузки в CherryPy

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

Как я понимаю, основной рабочий процесс должен быть таким:

  1. Есть ли идентификатор хранится в текущей сессии? Если это так, мы золотые.
  2. Если нет, имеет ли пользователь файлы cookie с идентификатором пользователя и логином входа? Если это так, обработайте их, аннулируйте текущий токен и назначьте новый, и добавьте информацию пользователя в сеанс. Еще раз, мы хорошие.
  3. Если ни одно из условий не выполняется, отобразите ссылку «Вход», направляющую мою форму OpenID.

Очевидно, что я мог бы просто включить код (или декоратор) на каждую публичную страницу, которая бы справилась с этим. Но это кажется очень ... раздражающим.

Я также мог бы установить метод по умолчанию index в каждом классе, который будет делать это, а затем использовать вспомогательный метод (по страницам) для отображения остальной части содержимого. Но это похоже на кошмар, когда дело доходит до случая разоблачения, кроме index.

Итак, я надеюсь, что есть ли способ в CherryPy установить код, который будет запускаться всякий раз, когда будет получен запрос? Если это так, я могу использовать это, чтобы настроить его так, чтобы текущий сеанс всегда включал всю необходимую мне информацию.

В качестве альтернативы, можно ли создать обертку вокруг декоратора cherrypy.expose, чтобы каждая открытая страница также запускала этот код?

Или, не удалось ни одного из них: я также открыт для предложений о другом рабочем процессе. Раньше я не писал такую ​​систему, и всегда готов к советам.


Edit: Я включил ответ ниже о том, как добиться того, чего я хочу. Однако, если у кого-то есть предложения по изменению рабочего процесса, мне бы очень понравился совет! Спасибо всем.

ответ

2

Nevermind, люди. Оказывается, это не так уж плохо; это просто вопрос:

  1. Напишите функцию, которая делает то, что я хочу.
  2. Внесите функцию в пользовательский инструмент CherryPy Tool, установленный на крючок before_handler.
  3. Включите этот инструмент глобально в моей конфигурации.