Реализация простой системы регистрации / входа в Rails с использованием файлов cookie - PullRequest
1 голос
/ 27 июля 2011

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

Что у меня сейчас

Приложение My Rails не является веб-сайтом; это веб-сервис, который связывается с приложением iPhone. Все коммуникации в формате JSON.

Когда пользователь регистрируется , приложение отправляет запрос POST на /users.json с name и password в виде JSON в теле HTTP. Затем Rails сохраняет идентификатор пользователя в cookie:

cookies.signed[:user_id] = @user.id

Когда пользователь выходит из системы , приложение отправляет запрос POST на /logout.json. Rails получает идентификатор пользователя из файла cookie, обновляет базу данных и удаляет файл cookie.

Позже, когда пользователь хочет снова войти в систему , приложение отправляет запрос POST на /login.json с name и password в виде JSON в теле HTTP. Rails снова устанавливает cookie.

Мой вопрос (ы)

  1. Является ли этот дизайн RESTful? Потому что вход и выход не являются ресурсами.
  2. Безопасно ли использовать такие куки? Я планирую использовать SSL.
  3. Есть ли лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Это очень простой подход

Более RESTful способ:

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

Вместо использования cookies.signed [: user_id] вы должны использовать сессию [: user_id]

SSL - большой плюс, потому что пароль не может быть прослушанчерез сеть.

И существует множество готовых систем аутентификации.

Мой фаворит - Devise:

https://github.com/plataformatec/devise

http://asciicasts.com/episodes/209-introducing-devise

http://railscasts.com/episodes/209-introducing-devise

1 голос
/ 27 июля 2011

есть хороший скринкаст, который Райан Бейтс сделал при аутентификации с нуля

http://railscasts.com/episodes/250-authentication-from-scratch

0 голосов
/ 27 июля 2011
  1. Нет, по указанной вами причине.
  2. Нет, вам нужно передать второй параметр для шифрования идентификатора пользователя.
  3. Ну, вы могли бы использовать драгоценный камень , есть несколько о.

Если вы хотите написать код самостоятельно, я бы порекомендовал посмотреть учебник. Тот, что на railstutorial.org , довольно хорош.

Основная идея заключается в создании пользовательской модели с зашифрованным паролем, в которой используется соль, образованная из текущего времени и пароля. Затем вы создаете контроллер сессий и делаете его RESTful, но используете куки вместо другого ресурса. Обязательно зашифруйте куки и солью:

cookies.permanent.signed[:remember_token] = [user.id, user.salt]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...