Rails 3 Devise Warden Вход в дыру в системе безопасности, которую нужно закрыть, вытаскивая мои волосы - PullRequest
0 голосов
/ 02 марта 2012

У меня проблема с моей функцией входа в систему.

  1. Когда пользователь нажимает на ссылку выхода из системы, все работает нормально, сеанс уничтожается, и пользователь может войти в систему как другой пользователь.
  2. Если в данный момент вошедший в систему пользователь закрывает браузер и возвращается на страницу входа в систему, или если пользователь просто нажимает кнопку возврата на странице входа в систему и пытается войти в систему как другой пользователь, пользователь направляется к пользователюранее вошли в приложение в этом браузере.
    Это нежелательная функциональность.Я хотел бы дать пользователю возможность войти в любую учетную запись, которую он хочет, независимо от того, возвращается ли пользователь на страницу входа или закрывает окно и возвращается на страницу входа.

    У меня естьпробовал 6 разных решений и ни одно из них не сработало.Кажется, что независимо от того, какие изменения я внесу в код, функция входа в систему всегда извлекает идентификатор пользователя из хеша сеанса [: warden.user.person.key] и использует его для входа в систему, независимо от того, что помещено в текстовое поле входа.Я пытался получить контроль над этим процессом, но потерпел неудачу при каждой попытке.

    У меня закончились идеи, и мне нужна помощь, поскольку это считается дырой в безопасности нашей системы.
    Пожалуйста, позвольте мне узнать, что еще вы хотели бы увидеть в коде.Я даю вам код контроллера сеанса и мои маршруты.

 
class SessionsController  Devise::SessionsController

  def new
    session["devise.omniauth_data"]=nil
    session[:last_registration_role]=nil
    super
  end
  def create
    if params['person']['remember_me'] == '1'
      cookies.signed['rem'] = {
        :value => params['person']['email'],
        :expires => 1.year.from_now,
        :httponly => true
      }
    end
    super
  end
  def destroy

    session["devise.omniauth_data"]=nil
    session[:last_registration_role]=nil
    super
    reset_session
  end    
end

Маршруты



                     new_person_session GET      /people/sign_in(.:format)                                                                           {:action=>"new", :controller=>"sessions"}
                                    person_session POST     /people/sign_in(.:format)                                                                           {:action=>"create", :controller=>"sessions"}
                            destroy_person_session GET      /people/sign_out(.:format)                                                                          {:action=>"destroy", :controller=>"sessions"}
                                   person_password POST     /people/password(.:format)                                                                          {:action=>"create", :controller=>"devise/passwords"}
                               new_person_password GET      /people/password/new(.:format)                                                                      {:action=>"new", :controller=>"devise/passwords"}
                              edit_person_password GET      /people/password/edit(.:format)                                                                     {:action=>"edit", :controller=>"devise/passwords"}
                                                   PUT      /people/password(.:format)                                                                          {:action=>"update", :controller=>"devise/passwords"}

1 Ответ

0 голосов
/ 02 марта 2012

В вашем application_controller попробуйте указать точное местоположение, куда вы хотите, чтобы люди отправляли после входа в систему:

def after_sign_in_path_for(resource)
  root_path
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...