2015-04-29 4 views
0

Я искал Tornado's documentation, и они говорят, что должны быть установлены безопасные файлы cookie.Как настроить безопасный файл cookie, а затем прочитать его содержимое?

Примером этого является успешное установление безопасного файла cookie, но я не могу его прочитать, используя get_secure_cookie() и get_current_user() всегда будет возвращать None.

Есть ли что-то, что документация не может объяснить? .

Я пытаюсь получить доступ к имени пользователя, хранящийся в куки, так что, когда кто-то пытается отправить сообщение в веб-розеткой чат он отклоняет сообщение, если пользователь не вошел в систему

EDIT:

Это как мои классы выглядят:

class BaseHandler(tornado.web.RequestHandler): 
    def get_current_user(self): 
     return self.get_secure_cookie("user") 

class MainHandler(BaseHandler): 
    def get(self): 
     if not self.current_user: 
      self.redirect("/login") 
      return 
     name = tornado.escape.xhtml_escape(self.current_user) 
     self.write("Hello, " + name) 

class LoginHandler(BaseHandler): 

    def post(self): 
     self.set_secure_cookie("user", self.get_body_argument("username")) 
     self.redirect("/") 

Это код WebSocket:

def open(self): 
     clients.append(self) 
     print(self) 

    def on_message(self, message): 

     print ("message:"+message) 
     username = self.get_current_user() 
     print(username) 
     if not username: 
      self.write_message('{"author":"[SYSTEM]","message":"You are not logged in."}') 
     else: 
      text = "placeholder" 
      message = '{"author":"'+username+'","message":"'+text+'"}' 
      for client in clients: 
       client.write_message(message) 

    def on_close(self): 
     clients.remove(self) 

ответ

0

Вы всегда получаете None из-за: https://github.com/tornadoweb/tornado/blob/master/tornado/web.py#L1084

Вам необходимо переопределить безопасные методы и торнадо есть несколько примеров: https://github.com/tornadoweb/tornado/search?utf8=%E2%9C%93&q=get_current_user

+0

Мой BaseHandler класс имеет следующий код: 'класса BaseHandler (смерч .web.RequestHandler): def get_current_user (self): return self.get_secure_cookie («пользователь») 'Это то, что вы имеете в виду или вы говорите aobut что-то еще? – Aeder

+0

Итак, следующий шаг, можете ли вы прочитать обычное значение cookie cookie с handler.get_cookie ('user')? Если вы можете - ваша проблема с функцией decode_signed_value: https://github.com/tornadoweb/tornado/blob/master/tornado/web.py#L640 –

+0

Обычные файлы cookie устанавливаются нормально, но они представляют ту же проблему, I не могут получить доступ к их контенту. Я также не могу получить доступ к содержимому подписанных файлов cookie с обычным 'get_cookie()' – Aeder

Смежные вопросы