2013-08-22 48 views
0

我的問題稍微複雜一些,然後標題假設。如何將兩個Rails應用程序的身份驗證耦合起來

我有兩個Rails4應用程序。兩者都通過mongoid訪問相同的mongodb。兩者都使用devise 3.0.0進行身份驗證,兩者都具有相同的用戶模型,它啓用了設計並使用相同的集合。

api.myapp.com 

第二應用提供從

myapp.com 

此外,相關網站,我從交付JS singlepage應用:

第一應用在域只能提供一個API

app.myapp.com 

後者可以無障礙地訪問API,並使用自制的托克n身份驗證補丁,以便令牌可以作爲HTTP頭傳輸。

兩個軌道的應用程序都在同一個內容:

config/initializers/devise.rb 
config/initializers/secret_token 
config/initializers/session_store 

後者看起來像:

Web::Application.config.session_store :cookie_store, key: '_myapp_session', domain: :all 

這就是我現在做我的骨幹基於單頁的應用程序:

  1. 我登錄應用程序
  2. 該應用程序獲取auth_t奧肯從API
  3. 使用令牌
  4. 的響應頭設置cookie

由於Cookie設置,我的應用程序商店令牌

  • 單頁面應用程序的請求一些額外的資源在myapp.com下的我的Rails網站上登錄exxt。壞消息!我不是。

    所以僞造的API的問題,我做到以下幾點:

    1. 我在Chrome啓動一個REST客戶
    2. 我登錄到API使用該客戶端,並獲得令牌
    3. 我要求一個額外的資源使用客戶端和令牌
    4. 的響應頭設置一個cookie
    5. 現在我進入我的Rails的網站,並...瞧我登錄

    我對這種行爲感到困惑。當請求資源並且用戶登錄時,API似乎提供了正確的cookie。否則,在使用REST客戶端之後,我不會登錄到我的網站。

    但是,如果我的單頁應用程序與REST客戶端完全相同,並且收到了設置cookie的響應標頭,我沒有登錄到我的網站。

    有沒有人有提示?

    問候 菲利克斯

  • 回答

    0

    你可能需要通過添加不包括完全合格的域名域參數來設置Cookie的具體範圍。

    代替下該cookie被 「api.myapp.com」 或 「www.myapp.com」 它需要由被引用爲 「myapp.com」

    實施例共享:

    cookies[cookie_name] = {:value =>token, :domain => 'myapp.com'} 
    

    我希望有幫助!

    +0

    這是一個很好的提示。但是上面提到的session_store配置已經將域設置爲'.myapp.com',它應該匹配所有子域。由於所有三個應用程序都是從域內的子域提供的,因此它應該可以工作。同時,我手動手工創建了xhr請求,在api中登錄了一個用戶,請求了一個資源,爲.myapp.com獲取了一個cookie,但沒有登錄到該web應用程序。走出這裏的選擇。 – GeorgieF

    1

    您可以使用中央身份驗證服務器CAS,然後在每個應用程序中,您可以使用omniauth gem登錄,就像您在兩個應用程序中使用Facebook或Twitter登錄一樣。

    這將消除您自己處理cookie和票據的麻煩。

    您可以使用CASINO的,它很容易安裝和使用,並且可以使用omniauthomniauth-cas

    你可以整合它您可以集成任何色器件寶石omniauth以同樣的方式。

    相關問題