2016-03-30 44 views
0

我試圖在我的服務器上創建一個只允許用戶進入頁面的關鍵系統,如果他們輸入了有效的密鑰作爲GET參數的話。如果密鑰無效或者沒有輸入密鑰,它們將被重定向到下面的「無效密鑰」頁面。一個人輸入密鑰後,Python瓶密鑰驗證系統不起作用?

@route('/test/invalidkey')#key is invalid! 
def index(): 
    return "Sorry, your API key is invalid! Message the admin if this is a problem." 

在所有的路線上,有一個apply=[require_key]參數。

@route('/test/count', method='GET', apply=[require_key]) 

這裏是require_key方法:

def require_key(fn):#check if api key is valid 
    if not request.query.key: 
     redirect('/test/invalidkey') 
    return fn 

現在沒有API密鑰。目前,我只是檢查是否有添加到網址的?key = hey參數。

我的問題是:每當有人第一次嘗試訪問沒有api鍵的頁面時,它會重定向到無效的鍵頁面,就像它應該的那樣。當有人第一次使用鑰匙進行訪問時,他們會按照應有的方式進行操作。但是......當某人在訪問頁面後沒有使用關鍵參數訪問頁面時,已經使用關鍵參數進行訪問,他們甚至可以在不需要密鑰GET參數的情況下訪問該頁面。爲什麼會發生?

如果即使有一個人使用密鑰訪問它,也允許任何人在沒有密鑰的情況下訪問它。這個關鍵的GET參數是否每次都被存儲和引用?如果是這樣,我該如何清除它?

我已經閱讀了瓶子文檔,但是隻有一小段文字解釋了應用參數以及它的作用。這並沒有涉及任何高級細節。

回答

0

我找到了一個使用這傢伙的博客文章的解決方案。你將不得不使用wayback機器來訪問它。

http://tumblr.kurttheviking.com/post/13053496552/using-decorators-to-require-sign-in-with-bottle-py

的require_key方法應該看起來更像是這樣的:

def require_uid(fn): 
    def check_uid(**kwargs): 
     cookie_uid = request.get_cookie('cookieName', secret='cookieSignature') 

     if cookie_uid: 
      //do stuff with a user object 
      return fn(**kwargs) 
     else: 
      redirect("/loginagain") 

    return check_uid