2016-03-30 2 views
0

Ich versuche, ein Schlüsselsystem auf meinem Server zu erstellen, das einen Benutzer nur zu einer Seite weitergehen lässt, wenn sie einen gültigen Schlüssel als einen GET-Parameter eingegeben haben. Wenn der Schlüssel nicht gültig ist oder wenn kein Schlüssel eingegeben wurde, wird er wie unten beschrieben auf eine Seite mit einem ungültigen Schlüssel umgeleitet.Python Flasche Schlüssel Authentifizierung System funktioniert nicht, nachdem eine Person einen Schlüssel eingibt?

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

Auf allen Routen gibt es einen apply=[require_key] Parameter. Hier

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

ist die require_key Methode:

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

Im Moment gibt es keine API-Schlüssel. Im Moment überprüfe ich nur, ob es sogar einen? Key = hey-Parameter zur URL hinzugefügt hat.

Mein Problem ist: Immer wenn jemand versucht, die Seite ohne einen API-Schlüssel zum ersten Mal zuzugreifen, leitet es auf die ungültige Schlüsselseite um, wie es soll. Wenn jemand zum ersten Mal mit einem Schlüssel greift, geht er so vor, wie er soll. Aber ... wenn jemand, der auf die Seite ohne Schlüsselparameter zugreift, nachdem er bereits auf die Seite zugegriffen hat, bereits mit dem Schlüsselparameters zugegriffen wurde, kann er auf die Seite zugreifen, ohne einen Schlüssel-GET-Parameter zu benötigen. Warum passiert das?

Wenn nur eine Person mit einem Schlüssel darauf zugreift, ist jeder erlaubt, der ohne Schlüssel darauf zugreift. Wird dieser Schlüssel-GET-Parameter jedes Mal gespeichert und erneut referenziert? Wenn ja, wie lösche ich es?

Ich habe die Flaschendokumentation durchgelesen, aber es gibt nur einen kleinen Textblock, der den Parameter apply erklärt und was er tut. Dies geht nicht in irgendwelche erweiterten Details.

Antwort

0

Ich fand eine Lösung mit Blogpost dieses Kerls. Sie müssen Wayback-Maschine verwenden, um darauf zuzugreifen.

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

Die require_key Methode wie folgt aussehen sollte:

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 
Verwandte Themen