2012-06-21 46 views
1

我有一個Rails應用程序設置爲OAuth2提供程序(使用Doorkeeper)。該應用程序使用每個用戶帳戶不同的子域(或通過CNAME記錄的完全不同的結構域)策略中的OmniAuth動態客戶端選項網站

i.e. 
user1.myrailsapp.com 
user2.myrailsapp.com 
www.mycustomdomain.com 

在提供者端,一切都按預期方式工作。

我還有第二個應用程序,它是使用第一個應用程序的暴露API的客戶端。我有一個客戶端版本,但只有OmniAuth策略中的硬編碼網站地址。

問題是,如何根據請求動態設置策略url。

回答

1

任何有興趣的解決方法是在使用動態提供商:https://github.com/intridea/omniauth/wiki/Dynamic-Providers

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :mystrategy, ENV["OAUTH_ID"], ENV["OAUTH_SECRET"], 
    :setup => lambda{|env| 
     env['omniauth.strategy'].options[:client_options].site = env['rack.session']['oauth_site'] 
    } 
end 
0

一種選擇是不這樣做的。

我有一個類似的應用程序,並遇到同樣的問題。然而,在思考了一會之後,我意識到我不想將它們發送到用戶帳戶子域上的策略提供者URL,因爲請求尚未完全通過身份驗證(尚未由Rails應用程序處理) )。

也是第一次用戶登錄的用戶帳戶子域尚未設置,所以它不可能在那裏路由。

因此,我將策略回調URL設置爲主網站。處理登錄請求,會話設置和所有內容後,我將客戶端重定向到其用戶子域。帶出一大堆痛苦。