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

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

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

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

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

最佳答案 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,并且您想要:

>添加您可以在请求中检查的内容,以了解它是ajax请求并进行相应调整.
>具体实施RPC Model for handling ajax requests.

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

点赞