Google App Engine中的认证:app.yaml与python代码

4 投票
2 回答
1638 浏览
提问于 2025-04-16 01:15

我正在写一个小应用程序,使用的是谷歌的应用引擎(GAE)。我的应用里有一些部分是专门给管理员使用的。我有两个选择:一个是在app.yaml文件里使用login: admin,另一个是在Python代码中使用google.appengine.api.users.is_current_user_admin()。对于我的情况,基本的身份验证就足够了。

那么,哪个方案更好呢?

使用app.yaml的好处是,Python代码会更简洁一些。而且,app.yaml可能会更高效,因为它可以在服务器上处理。(在最坏的情况下,它的性能是一样的。)唯一的缺点是,我不能显示一个自定义的页面,但我对此并不是太在意。

我不确定我的看法是否正确。

2 个回答

2

如果你有一些处理程序(handlers)只有管理员可以访问,那么使用app.yaml来保护这些页面看起来是最简单的办法。

不过,如果你有一些处理程序同时提供给管理员和普通用户使用(比如你的main.py),那么你就需要用比app.yaml更细致的方法来管理权限(比如使用google.appengine.api.users.is_current_user_admin()这个函数)。

我认为一旦你的应用程序运行起来,性能应该差不多(这部分时间在加载页面时几乎可以忽略不计)。

13

我觉得你的说法是对的。假设你的app.yaml文件里有以下内容:

- url: /admin/.*
  script: admin.py
  login: admin

如果你想让admin.py里的所有内容都只能给管理员使用,那么上面的配置会更高效:这样你就可以在不启动admin.py的情况下,直接拒绝那些没有权限的请求。

使用users.is_current_user_admin()这个检查是有用的,当你想要定义更细致的逻辑和行为时。比如说,你可能有一个处理程序,不管用户是管理员、非管理员,还是没有登录,都应该可以访问。你只需要检查他们当前的状态,这样就能返回合适的HTML内容。

撰写回答