Daha önceki doorkeeper ile yapmış oldugumuz single sign in üzerinde farklı bir yapı oluşturabiliriz. Örneğin bir client uygulaması birden fazla provider tarafından oturum açılması istenirse client tarafında provider ayarlarını değiştirmemiz gerekiyor.
Örneğin client uygulamasında hem A uygulamasında hemde B uygulamasındaki hesapla oturum açılabilmesi için aşağıdaki değişikliği yapmamız gerekiyor. değişiklikler buradakı kodların üzerinden yapıldı. Sıfırdan yazıyorsanız ilk önce burdaki yazılanları uygulayın
Provider tarafında herhangi bir farklılık yok daha cok client tarafını kurcalayalım.
lib/omnioauth/strategies/app_a_doorkeeper.rb oluşturalım
içeriği doorkeperla aynı sadece aşağıdaki kısmı değiştirelim
class AppADoorkeeper < OmniAuth::Strategies::OAuth2
option :name, :app_a_doorkeeper
lib/omnioauth/strategies/app_b_doorkeeper.rb oluşturalım
içeriği doorkeperla aynı sadece aşağıdaki kısmı değiştirelim
class AppBDoorkeeper < OmniAuth::Strategies::OAuth2
option :name, :app_b_doorkeeper
config/application.rb
config.UygulamaAAppID = 'providerda kayıtlı uygulama A ya ait appıd'
config.UygulamaAAppSecret=' providerda kayıtlı uygulama A ya ait appsecret'
config.UygulamaAAppSite="uygulama A ya ait provider site adresi"
config.UygulamaBAppID = 'providerda kayıtlı uygulama B ye ait appıd' config.UygulamaBAppSecret='providerda kayıtlı uygulama B ye ait appsecret' config.UygulamaBAppSite="uygulama B ye ait provider site adresi"
config/itilializers/omnioauth.rb
module OmniAuth::Strategies
class UygulamaADoorkeper < Doorkeeper
def name
:uygulama_a_doorkeeper
end
end
class UygulamaBDoorkeper < Doorkeeper
def name
:uygulama_b_doorkeeper
end
end
end
config/itilializers/devise.rb
require File.expand_path('lib/omniauth/strategies/uygulama_a_doorkeeper', Rails.root)
require File.expand_path('lib/omniauth/strategies/uygulama_b_doorkeeper', Rails.root)
Devise.setup do |config|
*
*
config.omniauth :uygulama_a_doorkeeper, Rails.application.config.UygulamaAAppID, Rails.application.config.UygulamaAAppSecret,
:client_options => {:site => Rails.application.config.UygulamaAAppSite}
config.omniauth :uygulama_b_doorkeeper, Rails.application.config.UygulamaBAppID, Rails.application.config.UygulamaBAppSecret,
:client_options => {:site => Rails.application.config.UygulamaBAppSite}
end
model/user.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,:omniauthable,:omniauth_providers => [:uygulama_a_doorkeeper,:uygulama_b_doorkeeper]
controller/omnioauth_callbacks_controller.rb
def uygulama_a_doorkeeper
oauth_data = request.env["omniauth.auth"]
*
*
end
def uygulama_b_doorkeeper
oauth_data = request.env["omniauth.auth"]
*
*
end
views/admin/session_controller.rb
<%=link_to "Sign in Uygulama A", user_omniauth_authorize_path(:uygulama_a_doorkeeper) %>
<%=link_to "Sign in Uygulama B", user_omniauth_authorize_path(:uygulama_b_doorkeeper) %>
Providerda oluşturduğumuz redirect_uri de şu şekilde değişmeli:
http://localhost:5000/users/auth/uygulama_a_doorkeeper/callback
Hiç yorum yok:
Yorum Gönder