Безопасность в angular.js с Ruby on Rails
Каков наилучший способ сделать аутентификацию?
В интерфейсе я использую Angular.js
на сервере: Ruby on Rails
Rails приложение, использующее API для моего интерфейса.
UPDATE:
Это будет одностраничное приложение.
Frontend будет разработан в Angular.js, backend в Ruby on Rails.
В идеале я хочу построить бэкэнд как сбор ресурсов, возвращенных в json.
Я ищу лучший способ реализации безопасности.
Когда пользователь открывает приложение, мне нужно проверить, не аутентифицирован ли пользователь.
Если нет - перейдите на страницу входа,
Если аутентифицировано - откройте, что он хочет, и возвратите необходимый ресурс из бэкэнд.
Я думаю, что мне нужно хранить токен аутентификации на стороне клиента.
Каков наилучший способ его создания, или Rails уже генерируют его для меня?
Ответы
Ответ 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