2016-04-04 11 views
0

Aus irgendeinem Grund kann ich keinen sicheren Cookie abrufen, den ich mit Tornado eingerichtet habe. Mit Firebug kann ich den Cookie und sein Ablaufdatum sehen, aber wenn ich versuche, ihn zu drucken oder abzurufen, wird er immer als Kein angezeigt. Gibt es einen Weg, auf dem ich es für ungültig halte, den ich nicht sehen kann? Dies ist der Code, den ich verwende:kann Tornado Secure Cookie nicht abrufen

class loginHandler(tornado.web.RequestHandler): 
def post(self): 
    # first type of request made to this page is a post 
    userEmail = self.get_argument("username") 
    password = self.get_argument("password") 
    deviceType = self.get_argument("deviceType") 

    # get some info from the client header 
    userIp = self.request.headers['X-Real-Ip'] 
    userAgentInfo = self.request.headers['User-Agent'] 

    result = pumpkinsdb.loginUser(userEmail, password, deviceType, userIp, userAgentInfo) 
    if result == None: 
     self.redirect("/") 
    else: 
     fullname = pumpkinsdb.pumpkinsdb_user['fullName'] 
     this_page_title = fullname if fullname else pumpkinsdb.pumpkinsdb_user['userEmail'] 

     # successful login set up user's cookies 
     # self.set_secure_cookie("memberId", str(user['memberId']), expires_days=0.1, secure=True, httponly=True) 
     self.set_secure_cookie("memberId", str(pumpkinsdb.pumpkinsdb_user['memberId'])) 
     self.write(str(self.get_secure_cookie("memberId"))) 

     time_now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 
     print "{} [{}::get] pid[{}] login requested for user: [{}] from [{}] using [{}]".format(
      time_now, self.__class__.__name__, os.getpid(), pumpkinsdb.pumpkinsdb_user['emailAddress'], 
      pumpkinsdb.pumpkinsdb_user['userIp'], pumpkinsdb.pumpkinsdb_user['userAgentInfo']) 

     self.render('calendar.html', title = this_page_title) 

def get(self): 
    validSession = self.get_secure_cookie("memberId") 
    if validSession: 
     this_page_title = pumpkinsdb.pumpkinsdb_user['fullName'] 
     self.render('calendar.html', title = this_page_title) 
    else: 
     print self.get_secure_cookie("memberId") 
     self.write(str(validSession)) 

Antwort

1

Ist Ihr Cookie-Geheimnis irgendwie verändert, wenn Sie den Server neu starten? Wenn sich das Cookie-Geheimnis ändert, werden alle vorhandenen Cookies für ungültig erklärt. Beachten Sie, dass das Cookie-Secret zwar zufällig generiert werden sollte, dies jedoch nicht bedeutet, dass Sie in Ihrem Code etwas wie haben sollten, da dies jedes Mal ein neues Geheimnis generiert. Stattdessen müssen Sie os.urandom einmal anrufen und speichern Sie seine Ausgabe irgendwo (halten Sie es sicher und privat, wie Ihre TLS-Schlüssel).

0

so dass im Grunde das Problem war, ich hatte vier Tornado hinter nginx Prozesse ausgeführt und für jeden Tornado Prozess erzeugen ich eine einzigartige zufällige Zeichenfolge mit:

cookie_secret = base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes) 

offensichtlich das war mein Problem, weil jeder Tornado Prozess ein anderes Geheimnis hatte Als ich versuchte, es zu lesen, dachte Tornado, dass es ungültig sei.

Der Schlüssel ist eine einzigartige zufällige Zeichenfolge zu erzeugen, aber es dann irgendwo speichern sichern, wie in Ihren Optionen:

define(cookie_secret, "934893012jer9834jkkx;#[email protected]@##") 

oder was auch immer Zeichenfolge, die Sie für richtig halten.

Vielen Dank an alle, die geantwortet haben. Das tut mir leid.