0

我有一个 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 并返回到基本的“/”url。我想我到了那里,但返回的状态总是None.

从我收集的信息来看,这要么是代码问题,要么是我的 apache 配置中的某些东西使身份验证无法正常工作。在 web.webopenid 中,该库在与 Web 服务器相同的目录中创建一个 .openid_secret_key 文件。当我运行示例代码时,它会被创建。当我通过 apache 运行我的代码时,它不会(至少不在 cgi-bin 中。其他地方?)无论如何,如果这个文件不是每次都生成或重新生成,它将阻止我登录。我相信这是一个 apache 问题,因为我尝试通过 web.py 网络服务器运行我的应用程序,并且我确实创建了文件并且我可以进行身份​​验证。我能得出的结论是这个文件没有被写入,每个后续查询都会尝试一个新文件,我永远无法进行身份验证。

4

1 回答 1

0

在回答 mod_wsgi 列表上的相同问题时给出了最可能的明显原因。看:

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

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

于 2011-02-12T11:58:55.820 回答