Аутентификация в App Engine / Python / Django без учета JSON - PullRequest
4 голосов
/ 22 сентября 2010

Я создаю сайт на Google App Engine, использую Python и Django non-rel.Все отлично работает для HTML и публикации / чтения данных.Но по мере продвижения вперед я бы хотел сделать множество обновлений с помощью AJAX, а в конечном итоге и с мобильных устройств, таких как Android и iPhone.

На моих страницах используется django non-rel и аутентификация для входа / выхода из системы.отлично работает для HTML.Но информация об обновлении, отправленная через JSON, должна быть аутентифицирована, чтобы пользователь мог внести изменения.Я вижу, как сделать аутентификацию только для вызовов AJAX не будет слишком сложно, поскольку вы все еще заходите на веб-сайт, но как насчет того, чтобы добавить аутентификацию на мобильном телефоне?

Итак, я новичок в этом, с чего начать?

Как настроить службы на gae, чтобы я мог выполнять аутентифицированные операции CRUD?В идеале я хотел бы использовать одни и те же службы REST для ajax, android и т. Д.

1 Ответ

2 голосов
/ 22 сентября 2010

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 users users и использовать учетные записи Google auth, или вы можете написать свою собственную. Написание собственного , конечно, означает реализацию механизма сеанса (для сохранения состояния в течение сеанса пользователя) и сохранение паролей в хешированном и соленом состоянии для проверки.

...