1

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

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

在我看来,基本的工作流程应该是这样的:

  1. 当前会话中是否存储了用户 ID?如果是这样,我们就是黄金。
  2. 如果没有,用户是否有带有用户 ID 和登录令牌的 cookie?如果是,则处理它们,使当前令牌无效并分配一个新令牌,并将用户信息添加到会话中。再一次,我们很好。
  3. 如果两个条件都不成立,则显示指向我的 OpenID 表单的“登录”链接。

显然,我可以在每个处理此问题的公共页面中包含代码(或装饰器)。但这似乎非常……令人恼火。

我还可以在每个类中设置一个默认index方法,它会执行此操作,然后使用(逐页)辅助方法来显示其余内容。但这对于偶尔暴露的方法来说似乎是一场噩梦index

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

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

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


编辑:我在下面提供了一个关于如何完成我想要的答案的答案。但是,如果有人有任何工作流程更改建议,我会喜欢这些建议!谢谢大家。

4

1 回答 1

2

没关系,伙计们。事实证明,这样做还不错;只需执行以下操作:

  1. 写一个函数来做我想要的。
  2. 将函数放入自定义 CherryPy 工具中,设置为before_handler钩子。
  3. 在我的配置中全局启用该工具。
于 2013-07-12T03:01:22.887 回答