Создание учетных записей пользователей в Google App Engine

Для проекта я собираюсь создать приложение в Google App Engine, где:

  • Лидеры обсуждений могут зарегистрироваться на своем веб-сайте (или OpenID или Google Account) на своем веб-сайте, чтобы использовать его.
  • На странице администрирования приложения они могут создавать групповое обсуждение, для которого они могут добавлять пользователей на основе их адреса электронной почты.
  • и эти пользователи затем должны получать сгенерированные данные учетной записи (если у них еще нет учетных записей), что позволяет им войти в эту группу с помощью своей недавно созданной учетной записи.

Я не хочу, чтобы лидеры обсуждений имели учетную запись Google или учетную запись OpenID, чтобы зарегистрироваться для приложения, а все остальные пользовательские аккаунты должны быть созданы лидером обсуждения.

Однако Google App Engine поддерживает только аккаунты Google и учетные записи OpenID. Как я могу это сделать? Существует ли существующая модель для создания учетных записей лидеров и создания учетных записей пользователей в Google App Engine, которые по-прежнему поддерживают API-интерфейс GAE?

Ответ 1

EngineAuth

Несколько месяцев назад я разработал пакет python под названием EngineAuth. Он использует промежуточное программное обеспечение для перехвата запроса, предназначенного для аутентификации.

Вот пример приложения:

http://engineauth.scotchmedia.com/

И источник:

https://github.com/scotch/engineauth

EngineAuth имеет различные стратегии аутентификации. Одним из них является пароль.

Password берет пароль и строку (может быть электронное письмо). Если строка находится в хранилище данных, она проверяет пароль на сохраненный хэш. Если он соответствует ему, регистрирует пользователя. Если строка не находится в хранилище данных, она создает нового пользователя.

EngineAuth также имеет стратегию appengine_openid, которая позволяет вам вводить пользователей в систему с помощью App Engine OpenId.

Самое приятное в EngineAuth заключается в том, что если ваш пользователь зарегистрирован в App Engine OpenID, а затем он регистрируется с паролем, он связывает пользователя с обоими стратегии.

aeauth

Я не был полностью доволен EngineAuth, поэтому решил создать более модульную конструкцию, которая больше зависела от webapp2. Я никогда не заканчивал, так как я разрабатываю проект в Go сейчас, но, возможно, код поможет.

webapp2 auth

Большая часть функциональных возможностей пароля EngineAuth и aeauth взята из webapp2_extras/auth что может дать вам простой подход.

Ответ 2

GAE User API предназначен только для того, чтобы предоставить вам зарегистрированный пользователь и некоторые его атрибуты. Вам все равно придется хранить эту информацию в хранилище данных внутри, скажем, модели User.

Оттуда вы можете делать все, что захотите, с помощью своей бизнес-логики, и как вы собираетесь хранить/создавать пользователей на основе электронных писем и что делать с этими пользователями, как их группировать и т.д.

Чтобы поддерживать вход OAuth, например Facebook или Twitter, вам нужно будет использовать свой собственный API для аутентификации пользователей из этих служб (регистрация ключей, запрос разрешений и т.д.). К счастью для вас существует множество фреймворков, которые покрывают эту проблему, но это зависит от вашей структуры и того, что вы в настоящее время используете.

(Отказ от ответственности). Поскольку вы просто создаете новое приложение, вы можете посмотреть проект gae-init, который в основном является отправной точкой для вашего нового приложения, которое уже имеет теги Google, Facebook и Twitter и сохраняет их в хранилище данных, где они могут изменять свои свойства. Вы должны быть уже знакомы с GAE, хотя.

Ответ 3

Если вы не хотите требовать учетную запись Google или учетную запись OpenID, вам необходимо запустить свою учетную систему. Это дает вам максимальную свободу, но это большая работа и заставляет вас отвечать за безопасность паролей (ouch). Лично я бы посоветовал вам пересмотреть это требование - OpenID особенно много для него (кроме IIUC это не так просто для использования Facebook).