我有一個web.py應用程序,我在本地通過mod_wsgi(http:// localhost/...)運行。我已經開始爲我的應用程序添加身份驗證,並希望使用web.py的內置模塊。我開始在這裏找到一個簡單的例子:http://log.liminastudio.com/programming/howto-use-openid-with-web-py在web.py中使用web.webopenid對用戶進行身份驗證
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 web服務器運行我的應用程序,我確實已經創建了文件並且可以進行身份驗證。我只能斷定這個文件沒有被寫入,每個後續查詢都會嘗試一個新文件,我永遠無法進行身份驗證。任何apache/mod_wsgi gurus都可以向我解釋這個文件正在寫入的地方,或者這是真正的問題嗎?
我修改了庫直接寫入/ tmp,但仍然沒有任何成功。我不相信這是一個文件問題。 – voodoogiant 2011-02-14 16:03:42