Как расширить функциональность входа в Turbogears 2.1

Я использую Turbogears 2.1 и repoze.who / what, и мне сложно понять, как расширить базовую функциональность аутентификации. По сути, я пытаюсь потребовать от пользователей активировать свою учетную запись по электронной почте по ссылке, прежде чем они смогут войти в систему. Если они попытаются войти в систему, не активируя свою учетную запись, я хочу отобразить соответствующее сообщение об ошибке. Функциональность Turbogears по умолчанию просто отображает одно сообщение для всех ошибок.

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

Спасибо


person Marc    schedule 25.12.2009    source источник
comment
Как выглядит ваш существующий код авторизации? например. какие предикаты вы используете, и / или они на уровне действия, уровне контроллера и т. д.   -  person Kylotan    schedule 06.01.2010


Ответы (1)


Невозможно дать действительно хороший ответ, не видя фактический код, но вот одна идея:

  1. Создайте плагин поставщика метаданных repoze.who, который «рисует» что-то, что указывает, активировал ли пользователь свою учетную запись.
  2. Создайте плагин для определения претендента, который проверяет, прошел ли пользователь аутентификацию, а также активировал ли он свою учетную запись (путем проверки метаданных, которые вы установили с помощью плагина метаданных).
  3. Создайте плагин претендента, чтобы отправить реальный вызов. Если пользователь не аутентифицирован, отправьте обратно форму / приглашение для входа. Если пользователь аутентифицирован (ваш плагин аутентификации успешно работает), но он не активировал свою учетную запись, отправьте обратно настраиваемую страницу с ошибкой, предлагающую пользователю активировать свою учетную запись.

В любом случае внимательно прочтите эту страницу.

Вы также можете использовать repoze.what с настраиваемым предикатом, но вам, вероятно, придется разбрасывать декораторы по всему вашему коду, проверяя, была ли их учетная запись активирована на каждом контроллере / методе. Уродливый.

Надеюсь это поможет!

person Kevin Horn    schedule 29.01.2010