检查CherryPy中每个页面加载时的登录状态

时间:2013-07-12 02:35:20

标签: python web cherrypy

我正在CherryPy中编写一个Web应用程序。我已将其设置为使用OpenID身份验证,并且可以成功获取用户的ID /电子邮件地址。

我想设置它,以便每当页面加载时,它会检查用户是否已登录,如果是,则显示有关其登录的一些信息。

我认为,基本的工作流程应该是这样的:

  1. 当前会话中是否存有用户ID?如果是这样,我们就是金色的。
  2. 如果没有,用户是否拥有带有用户标识和登录令牌的cookie?如果是,请处理它们,使当前令牌无效并分配新令牌,并将用户信息添加到会话中。再一次,我们很好。
  3. 如果两种情况都不成立,请显示指向我的OpenID表单的“登录”链接。
  4. 显然,我可以在每个处理此问题的公共页面中包含代码(或装饰器)。但这似乎非常令人恼火。

    我还可以在每个类中设置一个默认的index方法,这样做然后使用(逐页)辅助方法来显示其余的内容。但是,对于除index以外的偶然暴露方法,这似乎是一场噩梦。

    所以,我希望如此:在CherryPy中有没有办法设置一些代码,以便在收到请求时运行?如果是这样,我可以使用它来设置它,以便当前会话始终包含我需要的所有信息。

    或者,在cherrypy.expose装饰器周围创建包装器是否安全,以便每个公开的页面也运行此代码?

    或者,其中任何一个都失败了:我也愿意接受不同工作流程的建议。我以前没有写过这种系统,而且我总是乐于接受建议。


    编辑:我在下面列出了如何完成我想要的答案。但是,如果有人有任何工作流程变更建议,我会很喜欢这个建议!谢谢大家。

1 个答案:

答案 0 :(得分:2)

人们,没关系。事实证明,这并不是那么糟糕;这只是做以下事情的问题:

  1. 写一个能完成我想要的功能。
  2. 将函数设置为自定义CherryPy工具,设置为before_handler挂钩。
  3. 在我的配置中全局启用该工具。