Подтвердить что ты не робот

Аутентифицированное приложение на appengine с angularjs

Настройка:

  • шаблоны: angularjs (все статически подается из app.yaml)
  • api: ответы json, используемые контроллерами angularjs для извлечения данных из приложения.

Содержимое страницы подается из статического файла, поэтому невозможно использовать users.create_login_url(), users.create_logout_url() и т.д.

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

4b9b3361

Ответ 1

Я действительно сам работаю над решением этой проблемы. Проект называется Sapling - это стартовый проект AngularJS, который охватывает управление пользователями.

Это тот подход, который я принял:

  • Пользователь приходит на сайт - загружает html и javascript

  • После загрузки Angular введите GET запрос '/api/user/me'. Если пользователь выполнил вход в систему с возвратом представления пользователя, например.

    { 
      "name": "Bob",
      "admin": false,
      // ect.
    }
    

    Если пользователь не зарегистрирован в ответ на ошибку 401.

  • Если объект пользователя возвращен - проверьте, является ли пользователь также и администратором. Если получено сообщение 401, перенаправляйте пользователя на страницы входа (вы можете создать страницу входа в ваше приложение Angular, или если вы чувствуете, что пользователь не запутается, вы можете отправить их прямо в Google login).

Итак, как вы это делаете с помощью службы пользователей App Engine?

В вашем обработчике запросов для URL '/api/user/me

Вызов get_current_user() и is_current_user_admin()

  • Пользователь вошел в систему - добавьте admin boolean и верните представление пользователя как json.

  • Пользователь не авторизовался - верните a 401 Неавторизованный, т.е. response.set_status(401)

Как вы направляете пользователя к URL-адресам входа и выхода из системы?

Вы можете создавать обработчики запросов по следующим URL-адресам:

'апи/пользователь/Логин

webapp2.redirect(users.create_login_url())

'апи/пользователь/выход из системы'

webapp2.redirect(users.create_logout_url())

И направьте пользователей к ним из Angular.

Я думаю, что я осветил основы. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Ответ 2

Смотрите также этот вопрос: Ограничение доступа к статическому файлу с помощью GAE при обслуживании статического содержимого.

В вашем обработчике вы можете использовать службу пользователя, чтобы узнать, кто зарегистрировался и этот "пользователь" является администратором. Пример: https://developers.google.com/appengine/docs/python/users/overview

OAUTH2 - лучший вариант, если вы используете клиентское приложение.