У меня есть приложение 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 объяснить мне, где этот файл пишется или это действительно проблема?