【问题标题】:GAE middlewares for modules?用于模块的 GAE 中间件?
【发布时间】:2015-07-13 08:08:37
【问题描述】:

假设我的 GAE 项目中的模块很少(比如 A、B、C)。他们共享用户数据库和会话。

例如:模块 A 将管理登录/注销操作(通过 cookie),模块 B、C 将处理其他操作。仅供参考,这些模块是用 PHP 和 Python 开发的。

现在,我不想在所有 3 个模块上都制作用户和会话验证码。

无论如何,我是否可以为每个请求放置一个在所有 3 个模块之前运行的中间件。如X:如果用户已经登录,它会为每个请求添加header来设置用户id和一些用户的信息。

IE:在我可以实现我的上述想法之后。每个请求会在以下 3 种情况下运行 1 次:

  • X, A
  • X, B​​li>
  • X, C

你说什么? 谢谢

更新 1:更多信息

中间件,我指的是请求中间件。

如果 X 是一个中间件,那么它将在请求传递给应用程序(或模块)之前运行,它只会更改请求,例如:

  • 做一些认证动作
  • 添加一些标题:
    • X-User-Id:授权用户ID
    • X-User-Scopes:授权用户范围
  • 等等...

当然,它独立于内部模块的语言(PHP 或 Python 或 Java 或 ...)

X 中间件应该配置在app.yaml

【问题讨论】:

  • 为什么不用另一个模块?
  • 假设 X 是另一个模块,我如何将请求传递到 A、B 或 C 模块旁边?

标签: google-app-engine middleware google-app-engine-python


【解决方案1】:

我处理这种情况的方式(在纯 python 项目中,不了解 php)是使用自定义处理程序(继承我已经用于会话支持的 webapp2.RequestHandler)。在其定制的 dispatch() 方法中,用户信息被收集并存储在处理程序对象本身中。

处理程序的实现仅存在于一个版本控制文件中,但在引用处理程序的每个模块中都被符号链接(用于 GAE 可访问性)。这样我就不必管理用户和会话验证码的多个独立副本。

【讨论】:

  • 哦,如果项目只是 python,我们可以通过构建一个 wsgi 应用程序来使用您的解决方案,该应用程序将请求传递给内部的一些 wsgi 应用程序。我的问题是我当前的代码库是用 PHP 编写的,我正在将一些部分移动到 python。
  • 对,您可能需要每种语言的主副本,符号链接到相应的语言模块以共享代码。
  • 既然您提到它,即使使用中间件方法 - 您仍然需要为每种语言使用一个中间件,因为每个模块都执行到运行相应语言沙箱的应用引擎实例中。
  • 对于这么晚的回复,我深表歉意。我已经编辑了我的问题,以提供有关我的想法的更多详细信息。我正在寻找一种在 app.yaml 中配置此中间件的方法,因此此中间件将在每个实例上运行,与实例的语言无关。
  • 我不认为这是可能的:app.yaml 文件不是 100% 独立于模块的语言沙箱,这就是为什么它有不同的语言特定指南(例如java 甚至不使用 app.yaml 文件)。此外,除了静态或通过以相应语言实现的应用程序脚本之外,我在任何指南中都没有看到处理路线的方法。
猜你喜欢
  • 1970-01-01
  • 2014-07-20
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多