App Engine / Python / Django上的身份验证不依赖于JSON

时间:2010-09-22 16:46:25

标签: python json google-app-engine authentication django-nonrel

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

我的网页使用django non-rel,我的登录/注销身份验证非常适合HTML。但是,通过JSON发送的更新信息必须经过身份验证,用户才能进行更改。我看到如何对AJAX调用进行身份验证并不会太困难,因为你仍然会访问网站,但是什么时候投入手机身份验证呢?

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

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

1 个答案:

答案 0 :(得分:2)

Python使这非常简单,你可以创建一个检查auth的装饰器方法,并将装饰器添加到任何需要auth凭证的方法。

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 Model for handling ajax requests

  3. 对于实际处理身份验证,您可以使用google.appengine.ext users库并使用Google帐户身份验证,也可以自行编写。 Writing your own当然意味着实现session mechanism(用于在整个用户会话中保留状态)并将密码存储在散列和加盐状态以进行验证。