我有一个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控制器,我想处理id并返回基础'/'网址。我想我到了那里,但返回的状态始终是None
。
从我收集的内容来看,这可能是一个代码问题,或者我的apache配置中有一些东西阻止了身份验证的工作。在web.webopenid中,库在与Web服务器相同的目录中创建.openid_secret_key文件。当我运行示例代码时,会创建它。当我通过apache运行我的代码时,它没有(至少不在cgi-bin中。在其他地方?)无论如何,如果这个文件没有每次生成或重新生成,它将阻止我登录.I相信这是一个apache问题,因为我尝试通过web.py网络服务器运行我的应用程序,我确实创建了文件,我可以进行身份验证。我只能得出结论,这个文件没有被写入,每个后续查询都会尝试新文件而我永远不能进行身份验证。任何apache / mod_wsgi大师都可以向我解释这个文件的写入位置或者这是实际问题吗?
答案 0 :(得分:0)
在mod_wsgi列表中回答相同问题时,很可能是明显的原因。参见:
https://groups.google.com/d/msg/modwsgi/iL65jNeY5jA/KgEq33E8548J
它可能是前两个当前工作目录和Apache用户访问权限的组合。