2012-03-02 33 views
7

私はユーザーが自分の会社のサブドメインにログインできるアプリケーションを持っています。rails 3.2 subdomains and devise

私はdeviseを使用します。そして、このコードはユーザーフォームをルートドメインからサブドメインにリダイレクトします。

def after_sign_in_path_for(resource_or_scope) 
    scope = Devise::Mapping.find_scope!(resource_or_scope) 
    subdomain_name = current_user.firm.subdomain 
    if current_subdomain.nil? 
    # logout of root domain and login by token to subdomain 
    token = Devise.friendly_token 
    current_user.loginable_token = token 
    current_user.save 
    sign_out(current_user) 
    flash[:notice] = nil 
    home_path = valid_user_url(token, :subdomain => subdomain_name) 
    return home_path 
    else 
    if subdomain_name != current_subdomain.name 
     # user not part of current_subdomain 
     sign_out(current_user) 
     flash[:notice] = nil 
     flash[:alert] = "Sorry, invalid user or password for subdomain" 
    end 
    end 
    super 
end 

クローム、ファイヤーフォックス、オペラ、サファリには優れていますが、IE9では機能しません。エラーメッセージは表示されません。ログを作成すると、ユーザーは自分が気に入っていることがわかります。ユーザーがホームページにリダイレクトされると、そのユーザーは権限がありません。誰が何が起こっているのアイデアを持っていますか?ログを作成します。

Processing by SessionsController#create as HTML 
Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"JaffZi9f+Uyovuya8wR2u7LjG9w/3wdUDqTqONt/kFM=", 
"user"=>{"email 
"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, 
"commit"=>"Sign in"} 
User Load (0.0ms) SELECT "users".* FROM "users" WHERE 
"users"."email" = ''[email protected]' LIMIT 1 
(0.0ms) begin transaction 
(1.0ms) UPDATE "users" SET 
"last_sign_in_at" = '2012-03-02 20:46:06.658370', 
"current_sign_in_at" = '2012-03- 
02 20:56:29.481286', "sign_in_count" = 41, 
"updated_at" = '2012-03-02 20:56:29.482286' WHERE "users"."id" = 1 
[paperclip] Saving attachments. 
(62.0ms) commit transaction 
Firm Load (0.0ms) SELECT "firms".* FROM "firms" WHERE "firms"."id" = 1 LIMIT 1 
Firm Load (0.0ms) SELECT "firms".* FROM "firms" WHERE "firms"."subdomain" = 'den' LIMIT 1 
CACHE (0.0ms) SELECT "firms".* FROM "firms" WHERE "firms"."subdomain" = 'den' LIMIT 1 
Redirected to http://den.lvh.me:3000/ 
Completed 302 Found in 182ms (ActiveRecord: 0.0ms) 


Started GET "/" for 127.0.0.1 at 2012-03-02 21:56:29 +0100 
Processing by PrivateController#statistics as HTML 
Firm Load (0.0ms) SELECT "firms".* FROM "firms" WHERE "firms"."subdomain" = 'den' LIMIT 1 
Completed 401 Unauthorized in 2ms 


Started GET "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2012-03-02 21:56:29 +0100 
Processing by SessionsController#new as HTML 
Rendered devise/_links.erb (2.0ms) 
Rendered devise/sessions/new.html.erb within layouts/registration (13.0ms) 
Completed 200 OK in 27ms (Views: 26.0ms | ActiveRecord: 0.0ms) 
+0

あなたはこれを理解することになりましたか? – Kirk

+0

あなたのドメインは何ですか? IEにおそらくワイルドカードクッキーがありませんか?このトピックはそのような場合に役立ちます:[リンク](http://stackoverflow.com/questions/4826670/rails-devise-setting-a-devise-cookie-to-persist-across-different-subdomains) – HungryCoder

+0

@Kirkいいえ、HungryCoderのリンクは修正の可能性があるようです。今すぐテストする時間はありません –

答えて

0

サブドメインを経由する場合は、セッションクッキーをクロスドメインに変更する方がよい場合があります。

initializersでsession-store.rbファイルを編集すると、これが行われます。

Babyreveal::Application.config.session_store :cookie_store, 
key: '_babyreveal_session', 
:domain => ".mybabyreveal.com" 

注意してください。ドメイン属性の接頭辞。これにより、サブドメイン間でこのCookieにアクセスできるようになり、アプリケーションはサブドメイン間でセッションを維持する必要があります。あなたが探しているものは100%ではないかもしれませんが、正しい方向に進むべきです。