Предыдущий пользователь поднял с auth_token логин в Devise - PullRequest
1 голос
/ 12 апреля 2011

Вот мой сценарий.

Сначала я захожу как Алиса: http://localhost:3000/?auth_token=eMXBk8cuJMA1ETZfMIgB Затем, не выходя из системы, я вхожу как Боб: http://localhost:3000? Auth_token = Z9Ui7Cw_xCnOmGWOEUEH

Что происходит, после второго запроса GET я все еще вошел в систему как Алиса, а не Боб. Если я сделаю http://localhost:3000/users/sign_out между двумя входами в систему auth_token, все в порядке. Без sign_out Боб не может войти в систему, используя свой токен.

Это ошибка, или то, как все должно быть из-за проблем безопасности, о которых я не знаю? Можно ли переопределить это поведение с помощью хуков?

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Я столкнулся с этим с restful_authentication и разработкой.Вот то, что я использую, чтобы обработать это (поместите в application_controller.rb) и вызовите это, где необходимо.Обратите внимание, что я использую: ak для токена авторизации.Измените на то, что вы используете.

def switch_session(api_key_passed)
  if api_key_passed != current_user.authentication_token
    logger.info("******Switching session as token is different.*******")
    user = User.find_by_authentication_token(api_key_passed)
    sign_out(user)
    if @api_login_enabled.present?
      redirect_to(new_user_session_path(:ak => api_key_passed))
    else
      logger.info("***API Login Setting is Disabled.***")
    end
  end
end
1 голос
/ 25 октября 2012

Вам не хватает настройки в инициализаторе devise.rb:

  # By default Devise will store the user in session. You can skip storage for
  # :http_auth and :token_auth by adding those symbols to the array below.
  # Notice that if you are skipping storage for all authentication paths, you
  # may want to disable generating routes to Devise's sessions controller by
  # passing :skip => :sessions to `devise_for` in your config/routes.rb
  config.skip_session_storage = [:token_auth]

То есть сеанс не используется, когда пользователь аутентифицируется с помощью auth_token.

1 голос
/ 10 августа 2012

Стратегия Devise token_authenticatable - это путь входа в систему.При отправке пользовательского authentication_token в Devise этот пользователь войдет в систему и установит сеанс так же, как при входе через Интернет.Он не должен действовать как ключ API, который необходимо будет отправлять при каждом запросе, и информация об этом запросе исчезает после ответа сервера.

Для получения дополнительной информации ознакомьтесь с этой проблемой здесь: https://github.com/plataformatec/devise/issues/300

@ jschorr ответ будет работать, если вы хотите использовать его больше как ключ API, но вы должны знать, что исходная проблема на самом деле не сохранится во время сеанса предыдущего пользователя между различными клиентами, это непроблема безопасности сессий, протекающих между клиентами, и это именно то, что авторы Devise намеревались.Точно так же, как вам потребуется выйти из учетной записи веб-почты вашего существенного друга, чтобы проверить свою собственную, если они только что проверили свою почту с того же компьютера, вам нужно будет отправить сообщение о выходе в приложение Rails, прежде чем вы сможете переключать учетные записи.

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