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

Безопасность в angular.js с Ruby on Rails

Каков наилучший способ сделать аутентификацию?

В интерфейсе я использую Angular.js

на сервере: Ruby on Rails

Rails приложение, использующее API для моего интерфейса.

UPDATE: Это будет одностраничное приложение. Frontend будет разработан в Angular.js, backend в Ruby on Rails. В идеале я хочу построить бэкэнд как сбор ресурсов, возвращенных в json.

Я ищу лучший способ реализации безопасности.

Когда пользователь открывает приложение, мне нужно проверить, не аутентифицирован ли пользователь. Если нет - перейдите на страницу входа, Если аутентифицировано - откройте, что он хочет, и возвратите необходимый ресурс из бэкэнд.

Я думаю, что мне нужно хранить токен аутентификации на стороне клиента. Каков наилучший способ его создания, или Rails уже генерируют его для меня?

4b9b3361

Ответ 1

Я вообще не знаю Angular.JS, но я попытаюсь предоставить вам общую информацию о рельсах, которые вы можете использовать с любой Javascript Framework.

Для аутентификации вам просто нужно:

  • Модель для пользователей
  • контроллер, который обрабатывает логин, этот метод проверяет логин/пароль пользователя, создает объект сеанса со всей необходимой информацией (сеанс хранится на стороне сервера, а cookie используется на стороне клиента для связывания каждого запроса с сеансом)
  • Контроллер для обработки выхода, который в основном уничтожает только пользовательский сеанс

У вас есть хорошая реализация в руководстве по рельсам здесь, или вы можете найти несколько плагинов (authlogic кажется рекомендацией пользователей stackoverflow здесь).

Тогда существует несколько различий между обработкой аутентификации со статическими страницами html или с AJAX:

  • Запрос HTML отправит логин и пароль контроллеру, который автоматически перенаправит его на другую внутреннюю страницу после создания сеанса
  • В AJAX javascript на стороне клиента должен отправить запрос ajax, искать ответ сервером (успех/сбой) и запускать адаптированные действия (сообщение, если отказ, перенаправление, если успех)

В обоих случаях важно проверить, что пользователь аутентифицирован на каждом контроллере, иначе кому-либо будет разрешено запустить действие или получить доступ к внутренней информации.

Ответ 2

Я пытаюсь сделать что-то подобное, и я нашел это примерное приложение, которое было очень полезно, чтобы заставить меня двигаться в правильном направлении: https://github.com/karlfreeman/angular-devise

Также проверьте дальнейшие обсуждения этого вопроса: https://github.com/karlfreeman/angular-devise/issues/1

И здесь другое репо, которое принимает несколько иной подход: https://github.com/colindensem/demo-rails-angularjs

В итоге я заимствовал идеи из всего вышеперечисленного. Здесь рабочая демонстрация, если кому-то интересно: https://github.com/jesalg/RADD