FastNetMon

Sunday, 14 March 2010

Pylons: аутентификация посредством AuthKit

Есть вот такая отличная библиотека для всего, что только можно вытворить с авторизацией / аутентификацией в веб-приложении (поддерживаются HTTP basic, HTTP digest, form, cookie OpenID ит.д.) http://authkit.org/. Также на офсайте AuthKit явно указано, что с Pylons он работает ну просто супер :) Вот ее мы и будем подключать, хотя есть еще аналоги в лице http://what.repoze.org/docs/1.0/ и http://static.repoze.org/whodocs/ При этом руководствоваться мы будем вот этой инструкцией: http://pylonsbook.com/en/1.1/authentication-and-authorization.html Также в случае проблем с пониманием "куда вставить этот код" использовалась вот эта сборочка: http://pypi.python.org/pypi/SimpleSite/0.3.0

Настроим аутентификацию (просто проверка логина/пароля без контроля прав доступа к различным ресурсам).

Устанавливаем:
easy_install authkit


Открываем конфигурацию middleware:
vi myapp/config/middleware.py


Добавляем в самый верх, в блок import:
import authkit.authenticate


Также ПЕРЕД блоком:

# Display error documents for 401, 403, 404 status codes (and
# 500 when debug is disabled)
if asbool(config['debug']):
app = StatusCodeRedirect(app)
else:
app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])



С аналогичным отступом добавляем подключение auth middleware:

app = authkit.authenticate.middleware(app, app_conf)


Теперь нам необходимо сконфигурировать AuthKit:
vi development.ini


И в самый низ блока "[app:main]" добавляем следующее:

authkit.setup.method = form, cookie
authkit.form.authenticate.user.data = admin:qwerty
[без выравнивания по = раб. не будут ]admin2:qwerty2
authkit.cookie.secret = secret string
authkit.cookie.signoutpath = /main/signout


Таким образом мы создали одного пользователя и выбрали тип аутентификации - формы/куки, а также выбрали метод, при вызове которого будет происходить logout.

Теперь открываем наш контроллер:

vi myapp/controllers/main.py


После этого создаем там методы:

def private(self):
if request.environ.get("REMOTE_USER"):
return "You are authenticated as %s!" % request.environ.get("REMOTE_USER")
else:
response.status = "401 Not authenticated"
return "You are not authenticated"
def signout(self):
return "Successfully signed out!"


И пробуем открыть его через сеть: http://xx.xx.xx.xx:5000/main/private и там нам будет выдана форма, введя в которую admin/qwerty мы станем аутентифицированным пользователем. Проверка статус аутентификации проверяется по логину, который в случае успешной аутентификации помещается в request.environ.get("REMOTE_USER"). Чтобы "вылогиниться" нам необходимо просто посетить адрес http://xx.xx.xx.xx:5000/main/signout при этом куки файл, хранящий данные о залогинености будет удален.

Все, с аутентификацией закончено :)

No comments :

Post a Comment

Note: only a member of this blog may post a comment.