Использование web.webopenid с web.py для аутентификации пользователей - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть приложение web.py, которое я запускаю через mod_wsgi локально (http://localhost/...). Я дошел до точки добавления аутентификации в свое приложение и хотел использовать встроенный модуль web.py. Я начал с краткого примера найдено здесь: http://log.liminastudio.com/programming/howto-use-openid-with-web-py

import web, web.webopenid

urls = (
    r'/openid', 'web.webopenid.host',
    r'/', 'Index'
)

app = web.application(urls, globals())

class Index:
    def GET(self):
        body = '''
        <html><head><title>Web.py OpenID Test</title></head>
        <body>
            %s
        </body>
        </html>
        ''' % (web.webopenid.form('/openid'))

        return body

if __name__ == "__main__": app.run()

Это достаточно хорошо работает в терминале и идет к http://localhost:8080/. Другой пример http://c -farrell.blogspot.com / 2010/11 / usrbinenv-pythonimport-webfrom-web.html делает подобную технику, но имеет больше смысла для меня.

#!/usr/bin/env python
import web
from web import webopenid
urls = (
'/', 'index',
'/openid', 'webopenid.host',
)

... more code ...

class index:
  def GET(self):
    oid = webopenid.status()
    if not oid:
      return 'please log in: ' + \
        webopenid.form('/openid')
    else:
      return 'you are logged in as:' + \
              webopenid.form('/openid')

Здесь я немного растерялся. Из того, что я могу сказать, аргумент, переданный form, является возвращаемым URL-адресом после входа в систему. Например, если я добавлю 'http://www.yahoo.com/', он попадет туда после каждой попытки входа в систему. Я чувствую, что это должно указывать на мой собственный контроллер и просто проверять там, но соглашение, по-видимому, заключается в использовании контроллера web.webopenid.host, который, как я полагаю, обрабатывает идентификатор и возвращает к базовому URL '/'. Я думаю, что добираюсь туда, но возвращенный статус всегда None.

Из того, что я понял, это либо проблема с кодом, либо в моей конфигурации apache есть что-то, что мешает аутентификации работать. В файле web.webopenid библиотека создает файл .openid_secret_key в том же каталоге, что и веб-сервер. Когда я запускаю пример кода, это создается. Когда я запускаю свой код через apache, он этого не делает (по крайней мере, не в cgi-bin. Где-нибудь еще?). Во всяком случае, если этот файл не генерируется и не генерируется каждый раз, он не дает мне войти в систему. Полагаю, это проблема apache, поскольку я попытался запустить свое приложение через веб-сервер web.py, и мне удалось создать файл, и я могу пройти проверку подлинности. Все, что я могу сделать, это то, что этот файл не записывается, и каждый последующий запрос пытается создать новый файл, и я никогда не смогу аутентифицироваться. Могут ли какие-нибудь гуру apache / mod_wsgi объяснить мне, где этот файл пишется или это действительно проблема?

1 Ответ

0 голосов
/ 12 февраля 2011

Наиболее вероятные причины этого были приведены в ответе на тот же вопрос в списке mod_wsgi. См:

https://groups.google.com/d/msg/modwsgi/iL65jNeY5jA/KgEq33E8548J

Вероятно, это сочетание первых двух, текущего рабочего каталога и прав доступа пользователей Apache.

...