我需要在 Tornado 上运行的应用程序中通过 cookie 对用户进行身份验证。我需要解析 cookie 并使用 cookie 内容从数据库加载用户。在检查 Tornado RequestHandler documentation 时,有两种方法:

  • 通过覆盖 prepare() 类的 RequestHandler 方法。
  • 通过覆盖 get_current_user() 类的 RequestHandler 方法。

  • 我对以下声明感到困惑:



    我不明白其中的两件事:
  • 文档说 get_current_user() 可能不是协程是什么意思?这里可能不是什么意思?它要么可以是协程,要么不能。
  • 如果需要异步操作,为什么需要后一种形式,即 get_current_user() ?如果 prepare() 可以是协程而 get_current_user() 可能不是,那么 prepare() 不应该用于异步操作吗?

  • 我真的很感激这方面的任何帮助。

    最佳答案

  • 这里的“可能不是协程”是指“不允许是协程”或“不能是协程”。使用的语言令人困惑,可能应该将其更改为“不得”。
  • 再次,文档令人困惑:在这句话中首先提到了 prepare(),但在这句话之前是两个例子,而 get_current_user 是第一个。 “后者”是指使用 prepare() 的第二个示例。

  • 所以总而言之,无论您是否需要协程,它总是可以覆盖 prepare() 并设置 self.current_user 。如果您不需要协程来获取当前用户,您可以改写 get_current_user(),它会在第一次访问 self.current_user 时自动调用。你选择哪一个并不重要;你可以使用你觉得更自然的那个。 (我们有两种不同方法的原因是 get_current_user() 较旧,但我们不得不为协程使用不同的方法)

    关于python - 用户认证 : prepare vs get_current_user in tornado,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36739681/

    10-11 23:27