4

我正在 Google App Engine 上构建一个站点,运行 python 和 Django non-rel。一切都适用于 HTML 和发布/阅读数据。但是随着我的前进,我希望使用 AJAX 进行许多更新,最终还会通过 Android 和 iPhone 等移动设备进行更新。

我的页面使用 django non-rel 并且我的登录/注销身份验证非常适合 HTML。但是通过 JSON 发送的更新信息必须经过身份验证,用户才能进行更改。我知道只对 AJAX 调用进行身份验证不会太困难,因为您仍在访问网站,但是在进行手机身份验证时呢?

所以我是新手,我从哪里开始?

如何在 gae 上设置服务,以便进行经过身份验证的 CRUD 操作?理想情况下,我想为 ajax、android 等使用完全相同的 REST 服务。

4

1 回答 1

2

Python 使这变得非常简单,您只需创建一个装饰器方法来检查身份验证并将装饰器添加到任何需要身份验证凭据的方法中。

def admin(handler_method):
  """
  This decorator requires admin, 403 if not.
  """
  def auth_required(self, *args, **kwargs):
    if users.is_current_user_admin():
      handler_method(self, *args, **kwargs)
    else:
      self.error(403)
  return auth_required

...

@admin
def crudmethod_update(self, *args, **kwargs):
  ...

请注意,这假设了一些关于您如何获取用户数据等的事情,但任何设置的主体都是相同的。您可能正在努力的概念是,ajax 调用在服务器上的处理方式有所不同,但就像任何宁静的方法一样,您确实获得了相同的标头。如果您可以检查标准 html 请求的身份验证,则可以完全使用 ajax 请求劫持表单提交并返回相同的结果。您可能想要取回 JSON 或一小段 HTML,为此您想要:

  1. 添加一些您可以在请求中检查的内容,以了解它是一个 ajax 请求并进行相应调整。

  2. 实现一个RPC 模型来专门处理 ajax 请求

对于实际处理身份验证,您可以使用google.appengine.ext 用户库并使用 google 帐户 auth,或者您可以编写自己的。自己编写当然意味着实现会话机制(用于在用户会话中保留状态)并将密码存储在散列和加盐状态以进行验证。

于 2010-09-22T17:16:05.247 回答