2012-03-02 15 views
7

मेरे पास एक ऐसा एप्लिकेशन है जहां उपयोगकर्ता अपनी फर्म सबडोमेन में लॉग इन कर सकते हैं।रेल 3.2 सबडोमेन और 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

आपकी तैयार कुकी डोमेन क्या है? आईई शायद वाइल्डकार्ड कुकी गायब है? यह विषय आपको इस तरह के मामले में मदद कर सकता है: [लिंक] (http://stackoverflow.com/questions/4826670/rails-devise-setting-a-devise-cookie-to-persist-across- dififferent-subdomains) – HungryCoder

+0

@ किर्क नहीं, लेकिन मुझे लगता है कि HungryCoder का लिंक ऐसा लगता है कि यह ठीक हो सकता है। –

उत्तर

0

यदि आप सबडोमेन में जा रहे हैं तो अपने सत्र कुकी को क्रॉस-डोमेन होने के लिए बस बेहतर करना बेहतर हो सकता है।

प्रारंभकर्ताओं में सत्र-store.rb फ़ाइल को संपादित करना यह करता है।

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

ध्यान दें। डोमेन attribtue पर उपसर्ग। यह इस कुकी को सबडोमेन में एक्सेस करने की अनुमति देता है और एप्लिकेशन को सबडोमेन में इसका सत्र बनाए रखना चाहिए। आप जो 100% खोज रहे हैं वह 100% न हो लेकिन आपको सही दिशा में जाना चाहिए।

संबंधित मुद्दे