使用web.webopenid和web.py对用户进行身份验证

时间:2011-02-12 06:13:39

标签: python apache openid mod-wsgi web.py

我有一个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大师都可以向我解释这个文件的写入位置或者这是实际问题吗?

1 个答案:

答案 0 :(得分:0)

在mod_wsgi列表中回答相同问题时,很可能是明显的原因。参见:

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

它可能是前两个当前工作目录和Apache用户访问权限的组合。