2011-02-12 129 views
0

我有一個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都可以向我解釋這個文件正在寫入的地方,或者這是真正的問題嗎?

回答

0

最有可能的明顯原因是在回答關於mod_wsgi列表上的同樣問題時給出的。請參閱:

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

這可能是前兩種的結合,當前工作目錄和Apache用戶訪問權限。

+0

我修改了庫直接寫入/ tmp,但仍然沒有任何成功。我不相信這是一個文件問題。 – voodoogiant 2011-02-14 16:03:42

相關問題