2012-05-23 3 views
12

Wie kann ich verhindern, dass der Sitzungsspeicher eine Sitzung für JSON/XML-Aufrufe erstellt?Sitzungserstellung auf Schienen verhindern 3.2.2 für RESTful api

Mein Problem ist, dass ich Sitzungen in einer Datenbank speichern und es wird überflutet auf mehrere API-Anrufe.

Ich verwende Rails 3.2.2 und Devise für die Authentifizierung.

+0

Duplikat http://stackoverflow.com/questions/1275008/how-to-conditionally-assign-actioncontrollerbase-session-in-rails-2-3-3 –

+0

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

+0

alles zeigt auf https://github.com/kares/session_off. es funktioniert einfach nicht für mich. – refaelos

Antwort

16

Mein Problem hier mit Warden innerhalb Devise war. Ich musste Warden sagen, den Benutzer nicht in der Sitzung zu speichern, nachdem der Benutzer authentifiziert wurde.

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

Hoffe, dass hilft wer diesen Thread sieht.

+1

nice one. accept your answer. (oder meins :) –

+1

wo hast du diesen code? – kain

+0

@kain Ich glaube, dies ist eine Zeile in der Devise SessionsController Aktion zu überschreiben – Ben

1

in der Theorie, wenn Sie es nicht verwenden, ist es jetzt nicht geladen. bis Schienen 2.3.8, könnten Sie tun:

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

protected 

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

Sie jetzt das gleiche mit diesem Juwel tun können https://github.com/kares/session_off

+0

Ich habe versucht, Ihre Lösungen und es funktioniert nicht. vielleicht funktioniert devise und session_off nicht gut zusammen ?! – refaelos

+0

Beachten Sie, dass das Plug-in den Sitzungsaufruf nur vom Controller neu definiert. Der Aufruf von request.session ruft weiterhin die Sitzung ab. Ich denke, dass devise (eigentlich warden) env ['rack.session'] :( –

+0

ich bekomme mehrere Fehler, wenn ich session_off benutze. Ich habe wahrscheinlich mehrere Plugins, die die Sitzung verwenden. – refaelos

-3

sollten Sie verwenden "devise: timeoutable" in Ihrem Modell und verwenden config.timeout_in = 0 in config/initializers/devise.rb

Starten Sie Ihren Server!

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