2012-05-23 4 views
12

Как я могу запретить хранилищу сеансов создавать сеанс для вызовов JSON/XML?Предотвращение создания сеанса на рельсах 3.2.2 для RESTful api

Моя проблема заключается в том, что я сохраняю сеансы в базе данных, и она наводняется на нескольких вызовах api.

Я использую Rails 3.2.2 и Devise для аутентификации.

+0

дубликат http://stackoverflow.com/questions/1275008/how-to-conditionally-assign-actioncontrollerbase-session-in-rails-2-3-3 –

+0

см http://stackoverflow.com/questions/4003667/rails-3-disable-session-cookies –

+0

все указывает на https://github.com/kares/session_off. это просто не работает для меня. – refaelos

ответ

16

Моя проблема здесь была с Warden внутри Завещания. Мне пришлось «рассказать» Warden, чтобы он не хранил пользователя в сеансе после аутентификации пользователя.

resource = warden.authenticate!(:scope => resource_name, :store => !(request.format.xml? || request.format.json?)) 

Надеюсь, что поможет любому, кто видит эту тему.

+1

приятный. Примите ваш ответ. (или мой :) –

+1

где вы написали этот код? – kain

+0

@kain Я считаю, что это переопределяет строку в Devise SessionsController create action – Ben

1

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

# application_controller.rb 
session :off, :if => :sessionless_request? 

protected 

def sessionless_request?(request) 
    request.format == :xml || request.format == :json 
end 

теперь вы можете сделать то же самое с этим драгоценным камнем https://github.com/kares/session_off

+0

Я пробовал ваши решения, и он не работает. возможно, разрабатывать, а session_off не работает хорошо?! – refaelos

+0

Обратите внимание, что плагин только переопределяет сеансовый вызов от контроллера, запрос request.session все равно будет получать сеанс. Я думаю, что devise (на самом деле warden) использует env ['rack.session'] :( –

+0

Я получаю несколько ошибок при использовании session_off. Возможно, у меня есть несколько плагинов, которые используют сеанс. – refaelos

-3

Вы должны использовать "Завещание: timeoutable" в вашей модели и использовать config.timeout_in = 0 в конфигурации/инициализаторами/devise.rb

перезапуске сервера!

3
resource = warden.authenticate!(:scope => resource_name, :store => is_navigational_format?) 

 Смежные вопросы

  • Нет связанных вопросов^_^