Это приложение демонстрирует работу с ВКонтакте API в rails. Для авторизации и вызова API-методов используется гем vkontakte_api. Приложение ничего не пишет на ВКонтакте - все методы вызываются только для чтения данных.
Дабы не усложнять задачу, было решено не хранить пользователей в БД, а вместо этого хранить их состояние в сессии.
Авторизация происходит в стандартном для oauth2 порядке:
- пользователь редиректится на страницу ВКонтакте, где ему предлагается дать приложению права на доступ к его данным
- после согласия пользователь редиректится обратно в приложение, с передачей кода в параметрах
- приложение запрашивает у ВКонтакте токен доступа и uid текущего пользователя, используя полученный ранее код
- приложение вызывает методы API, используя токен доступа (хранящийся в сессии)
При выходе данные просто удаляются из сессии.
Приложение использует только методы получения данных из ВКонтакте. На главной странице для авторизованных пользователей отображается лента новостей (API-метод newsfeed.get
), список друзей (friends.get
) и групп (groups.get
). Также в меню выводится аватар и имя текущего пользователя (метод users.get
, в который передается id текущего пользователя из сессии).
Лента новостей приходит в специфическом формате, поэтому ее обработка выделена в отдельный метод MainController#process_feed
. Также некоторый функционал вынесен в MainHelper
.
Прежде всего необходимо зарегистрировать приложение на ВКонтакте с типом "веб-сайт". В результате будут получены ID приложения и защищенный ключ, необходимые для авторизации приложения пользователями.
Теперь можно разместить приложение в любом rack-совместимом окружении, где возможна установка расширений на C. Необходимо лишь указать в переменных окружения 3 параметра:
- APP_ID - ID приложения
- APP_SECRET - защищенный ключ
- REDIRECT_URI - адрес, на который будет возвращен пользователь после подтверждения прав приложения
Первые 2 параметра можно получить на странице редактирования приложения (после создания оного) на ВКонтакте (на странице настройки приложений в разделе "Администрируемые приложения").
Параметр REDIRECT_URI
должен содержать путь к экшену SessionsController#callback
(в данном примере это http://vkontakte-on-rails.herokuapp.com/callback
). Хост данного адреса должен соответствовать базовому домену, заданному в настройках приложения на ВКонтакте, иначе после редиректа пользователя на ВКонтакте он увидит ошибку. Базовый домен в упомянутых настройках не должен содержать протокол - только доменное имя (vkontakte-on-rails.herokuapp.com
, а не http://vkontakte-on-rails.herokuapp.com
).