Oauth_client_and_server is a project mainly written in RUBY and SHELL, it's free.
oauth client and server application
=Настройка сервера: Укажите в app/models/client_application.rb в методе oauth_server адрес своего сервера ==Передача дополнительных параметров клиентскому приложению
end ==Регистрация клиентского приложения:
=Настройка клиента: Gemfile: gem 'oa-core' gem 'warden_oauth' gem 'devise', '1.4.2' gem "oauth-plugin", ">= 0.4.0.pre1" В приложении установить devise. Иснтрукция: https://github.com/plataformatec/devise Сгенерируйте oauth_consumer для клиента, следуя инструкции разработчика гема oauth-plugin: https://github.com/pelle/oauth-plugin Содержание модели пользователя: devise :database_authenticatable, :omniauthable, :token_authenticatable attr_accessible :email, :password, :password_confirmation, :remember_me, :access_token, :access_secret Исправьте в миграции create_oauth_consumer_tokens.rb t.string :token, :limit => 1024 на t.string :token, :limit => 767 Замените в app/controllers/oauth_consumers_controller.rb before_filter :login_required, :only=>:index на before_filter :login_or_oauth_required, :only=>:index Раскомментируйте определения logged_in? и def current_user=
Добавьте в config/initializers/devise.rb данные полученные от серверного приложения: require 'warden_oauth' config.warden do |manager| manager.oauth(:my_app) do |my_app| my_app.consumer_secret = APP_KEY my_app.consumer_key = APP_SECRET my_app.options :site => 'http://server_application_url' end manager.default_strategies(:scope => :user).unshift :my_app_oauth end Warden::OAuth.access_token_user_finder(:my_app) do |access_token| if @user = User.find_by_email(access_token.params[:user_email]) @user else User.create!(:email => access_token.params[:user_email], :password => Devise.friendly_token[0,20]) end end Добавьте в config/initializers/oauth_consumers.rb определение своего сервиса, взяв APP_KEY и APP_SECRET из данных клиент приложения в серверном приложении :my_service => { :key => APP_KEY, :secret => APP_SECRET } Добавьте ссылку на получение пользовательской сессии с помощью серверного приложения: <%= link_to 'Log in via My_app', new_user_session_path(:warden_oauth_provider => 'my_app') %>