rails 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

Работи супер в chrome, firefox, opera и safari, но не работи в IE9. Не получавам никакви съобщения за грешка. От дневника виждам, че потребителят получава sigend и когато потребителят бъде пренасочен към началната страница, той/тя е неупълномощен. Някой има ли идея какво се случва? Оформете дневника.

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 "/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)

person Andreas Lyngstad    schedule 02.03.2012    source източник
comment
Разбрахте ли това?   -  person Kirk    schedule 02.06.2012
comment
кои са вашите домейни за бисквитки на Device? IE вероятно липсва бисквитка със заместващ знак? тази тема може да ви помогне в такъв случай: връзка   -  person HungryCoder    schedule 12.06.2012
comment
@Kirk Не, но мисля, че връзката на HungryCoder изглежда, че може да е поправката. В момента няма време за тестване   -  person Andreas Lyngstad    schedule 14.06.2012
comment
@AndreasLyngstad Благодаря. Всъщност измислих решение с Rack Middleware и малко бъркотия със сесията. Работи добре. Уведомете ме, ако вие или ако някой тук има нужда от помощ и мога да ви изпратя моето решение   -  person Kirk    schedule 14.06.2012


Отговори (1)


Ако преминавате през поддомейн, може би е по-добре просто да промените сесийната си бисквитка, за да бъде между домейн.

Редактирането на файла session-store.rb в инициализаторите прави това.

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

Забележете . префикс на атрибута на домейна. Това позволява тази бисквитка да бъде достъпна в поддомейни и приложението трябва да поддържа сесията си в поддомейни. Може да не е 100% това, което търсите, но трябва да ви насочи в правилната посока.

person davydotcom    schedule 18.06.2012