Code Monkey home page Code Monkey logo

vkontakte_on_rails's Introduction

ВКонтакте API + ruby

Это приложение демонстрирует работу с ВКонтакте 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).

vkontakte_on_rails's People

Contributors

7even avatar rromanchuk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

vkontakte_on_rails's Issues

Ошибка авторизации

В общем выдает ошибку {"error":"invalid_client","error_description":"client_id is incorrect"} при авторизации. Задеплойил на локальном сервере

Need Devise session token

how i can use vk gem with devise gem

class MainController < ApplicationController
  before_action :authenticate_user!
  before_action :vk_acs, only: :index

  def index
    @user = @vk.users.get(uid: session[:vk_id], fields: [:screen_name, :last_seen, :sex, :city, :country, :photo_200_orig, :online, :contacts]).first

    # Friends

    @friends = @vk.friends.get(fields: [:screen_name, :photo, :photo_200_orig])['items']

    #@vk.friends.get(fields: [:screen_name, :last_seen, :sex, :city, :country, :photo_200_orig, :online, :contacts])

    @friends_online = @vk.friends.getOnline.select {|frd| frd }

  end

  private

  def vk_acs
    # this you your app use becouse you have session but in devise i dont know how to use so could you help me please find out who to find TOKEN for devise gem 
    @vk = VK::Application.new(app_id: numbers, version: '5.52', access_token: session["token"] )
  end
end

here my rest of config

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  skip_before_action :verify_authenticity_token

  def vkontakte
    create
  end

  private

    def create
      auth_params = request.env["omniauth.auth"]
      provider = AuthenticationProvider.where(name: auth_params.provider).first
      authentication = provider.user_authentications.where(uid: auth_params.uid).first
      existing_user = current_user || User.where('email = ?', auth_params['info']['email']).first

      if authentication
        sign_in_with_existing_authentication(authentication)
      elsif existing_user
        create_authentication_and_sign_in(auth_params, existing_user, provider)
      else
        create_user_and_authentication_and_sign_in(auth_params, provider)
      end
    end

    def sign_in_with_existing_authentication(authentication)
      sign_in_and_redirect(:user, authentication.user)
    end

    def create_authentication_and_sign_in(auth_params, user, provider)
      UserAuthentication.create_from_omniauth(auth_params, user, provider)

      sign_in_and_redirect(:user, user)
    end

    def create_user_and_authentication_and_sign_in(auth_params, provider)
      user = User.create_from_omniauth(auth_params)
      if user.valid?
        create_authentication_and_sign_in(auth_params, user, provider)
      else
        flash[:error] = user.errors.full_messages.first
        redirect_to new_user_registration_url
      end
    end
end

Пишем по новой

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

Сломалась авторизация - http://vkontakte-on-rails.herokuapp.com/

Сломалась авторизация тут - http://vkontakte-on-rails.herokuapp.com/

У меня на локальной машине процесс останавливается после переадресации с ВК обратно в приложение.

http://0.0.0.0:3000/?code=xxxxxxxxx&state=xxxxxxxxx

Дальше не идет. Предполагаю, что что-то поменялость в ВК

автоматическая авторизация по аналогу topface.com

Может быть общими усилиями сделаем так, что при заходе на сторонний сервер, вне нативного приложения Вконтакте (не standalone), судя по всему по токену в куках, получаем автозаход по полученной куке с номером пользователя.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.