为什么GAE会忽略我的yaml命令来要求管理员登录



我正在开发一个GAE应用程序。使用localhost进行开发是一种麻烦,因为有些交互组件需要系统在互联网上。然而,我对该应用程序的预发布版本感到奇怪,所以我在对其进行故障排除时启用它,然后禁用它。最好要求管理员登录,这样我就可以在线并将其保密。当我对app.yaml进行(非常简单)必要的更改并更新应用程序时,什么都不会改变。我仍然可以在不登录的情况下访问它(我检查了我是否已从谷歌注销)。有什么想法吗?下面是我的app.yaml文本。顺便说一句,唯一一个需要登录的处理程序remote_api也行为不端。它返回错误"此请求不包含必要的标头"。

application: (removed for privacy)
version: 1
runtime: python
api_version: 1
handlers:
- url: /remote_api
  script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
  login: admin
- url: /stylesheets
  static_dir: stylesheets
- url: /javascript
  static_dir: javascript
- url: /images
  static_dir: images
- url: /.*
  script: example.py
  login: admin  

我的最佳猜测是您实际上并没有注销。发生这种情况的原因是,当你在其他谷歌应用程序上使用注销功能时会有延迟——为了避免每次请求都必须与谷歌账户服务进行核对,应用程序引擎使用了一个短暂的cookie,无论谷歌账户服务是什么,它都允许访问,直到超时(我认为是5分钟)。

如果你真的想检查你是否可以在注销时访问它,请使用Chrome的隐身窗口。(或等待5分钟。:-)

remote_api行为也可以解释为:出于安全原因(为了阻止某些基于Javascript的攻击),remote_api处理程序不允许web浏览器访问该处理程序。它只接受来自专用remote_api客户端库的请求,该库传递Javascript代码无法设置的额外标头。

顺便说一句,最好使用标准的remote_api处理程序位置,并使用内置子句来启用它:

builtins:
- remote_api: on

最新更新