我正在爲我的應用程序創建一個API。一方面是API服務器(和主應用程序),另一方面是客戶端。服務器使用DoorKeeper使用OAuth 2.0保護API(基本上將主應用程序轉換爲OAuth 2.0提供程序),客戶端使用OmniAuth和我的應用程序的自定義策略。Rails 3 + Omniauth:將額外參數傳遞給api服務器(DoorKeeper)
主應用程序使用多租戶使用子域;所以每個客戶都有自己的子域名。還有一個oauth
子域被路由到DoorKeeper界面。
當用戶單擊「使用我的應用程序登錄」鏈接時,他會重定向到oauth子域。如果他沒有登錄到主應用程序,他需要重定向到的登錄頁面正確的子域下。所以我需要將客戶端的帳戶名傳遞給服務器,以便DoorKeeper知道要重定向到哪個子域。
我該如何做到這一點?
我對這個主題進行了研究,並發現如何傳遞給OmniAuth參數,該參數將傳遞給回調操作。這些參數是否可用於服務器?
編輯:我沒有使用Devise!
編輯2:這是一些代碼。
客戶端應用程序會話控制器創建行動(我的應用登錄)def set_client
self.current_client = Client.find(params[:client][:name])
redirect_to "/auth/catapult?client=#{self.current_client.account_name}"
end
正如你所看到的,我追加客戶端參數去的OmniAuth路線,但這個參數是不能傳遞到服務器應用程序(看門人) ,所以我不知道在服務器應用上重定向到哪裏。
看門配置resource_owner_authenticator do
p params
User.find_by_id(session[:user_id]) || redirect_to(log_in_path)
end
在上面的重定向,我需要指定客戶的賬戶名作爲子域,但由於params哈希表簡化版,包含我沒有這個信息(客戶的帳戶名)客戶端的我通過的帳戶名稱(客戶端參數)
對不起,我不明白你的答案......我添加了一些代碼來使問題更清楚。 – 2013-03-01 10:03:57
@AzizLight我加了更多解釋。它會回答你的問題或提示你的更多信息:) – iain 2013-03-01 10:15:42
基本上,用戶在沒有子域的情況下啓動,客戶端應用程序是一個不同的應用程序(通常它可以是一個移動應用程序,它只是碰巧它是另一個Rails應用程序),我需要做的,就是讓omniauth把額外的參數傳給門衛。所以基本上我不能使用你的方法,因爲我自己沒有做GET請求,OmniAuth是... – 2013-03-01 10:18:39