Skip to content

dom1nga/oauth_client_and_server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Настройка сервера:

Укажите в app/models/client_application.rb в методе oauth_server адрес своего сервера

Передача дополнительных параметров клиентскому приложению

  • добавьте соответствующий параметр в oauth_tokens с помощью миграции

  • добавьте его в app/models/oauth_token.rb (в конкретном примере это user_email)

def to_query
  "oauth_token=#{token}&oauth_token_secret=#{secret}&user_email=#{user_email}"
end
  • после создания access_token-a передайте нужное значение access_token-у в app/models/request_token.rb:

RequestToken.transaction do
  access_token = AccessToken.create(:user => user, :client_application => client_application)
  access_token.user_email = user.email
  #...
end

Регистрация клиентского приложения:

  • Перейдите по адресу http://адрес_серверного_приложения/oauth_clients/new

  • Зарегестрируйте клиент-приложение

  • Используйте данные на странице приложения для настройки клиентского приложения

Отключение перехода на страницу oauth_authorize_access в config/application.rb

config.disable_oauth_authorize_access_page = true

Настройка клиента:

Gemfile:

gem 'oa-core'
gem 'warden_oauth'
gem 'devise', '1.4.2'
gem "oauth-plugin", ">= 0.4.0.pre1"

В приложении установить devise. Иснтрукция: github.com/plataformatec/devise Сгенерируйте oauth_consumer для клиента, следуя инструкции разработчика гема oauth-plugin: 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') %>

About

oauth client and server application

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published