# coding: utf-8

Глава 9 Войти, выйти

Теперь, когда новые пользователи могут регистрироваться на нашем сайте (Глава 8), пришло время, чтобы дать зарегистрированным пользователям возможность входить на сайт и выходить из него. Это позволит нам добавить настройки, зависящие от регистрационного статуса и личности текущего пользователя. Например, в этой главе мы добавим в header сайта ссылки войти/выйти и ссылку на профиль пользователя; в Главе 11, мы будем использовать идентификацию вошедшего в систему пользователя для создания микросообщений, связанных с этим пользователем, и в Главе 12 мы позволим текущему пользователю следовать за другими пользователями приложения (тем самым получать поток (feed) их микросообщений).

Наличие функции входа пользователей в систему, также позволит нам реализовать модель безопасности, ограничивающую доступ к определенным страницам, основываясь на идентификации вошедшего в систему пользователя. Например, как мы увидим в Главе 10, только вошедшие пользователи смогут получить доступ к странице, используемой для редактирования информации о пользователе. Система входа/выхода также позволит реализовать особые привилегии для пользователей с правами администратора, такие как возможность (также в Главе 10) удалять пользователей из базы данных.

Как и в предыдущих главах, мы будем делать нашу работу в новой ветке и объединим изменения в конце:

$ git checkout -b sign-in-out

9.1 Сессии

Сессия это полупостоянное соединение между двумя компьюторами, такими как клиентский компьютер под управлением веб-браузера и сервер под управлением Rails. Есть несколько моделей поведения сессий, принятых в сети: “забывание” сессии при закрытии браузера, опциональное использование “запомнить меня” флажка для постоянных сессий, и запоминание сессий до явных признаков выхода пользователя из системы.1 Мы выберем последнюю из этих опций: когда пользователь войдет, мы запомним его статус вошедшего “навсегда”,2 и очистим сесию только после явного выхода пользователя из системы.

Удобно моделировать сессии как RESTful ресурс: у нас будет signin страница для new сессий, вхождение будет создавать create сессию, и выход будет destroy ее. Поэтому нам понадобится контроллер Sessions с new, create, и destroy действиями. В отличие от контроллера Users, который использует сервер базы данных (с помощью модели User) для сохранения данных, контроллер Sessions будет использовать куки, которые представляют собой небольшой фрагмент текста, помещаемого в браузер пользователя. Большая часть работы, по созданию вход/выход системы, происходит от построения этой, основанной на куки, аутентификационной машинерии. В этом, а также в последующих разделах, мы выполним подготовку к ее запуску, построив контроллер Sessions, формы входа, и связанные действия контроллера. (Большая часть этой работы параллельна регистрации пользователя из Главы 8.) Затем мы завршим вход пользователей необходимым куки-манипулирующим кодом в Разделе 9.3.

# coding: utf-8