2012-05-23 13 views
12

Jak mogę zapobiec tworzeniu sesji sesji przez wywołania JSON/XML?Zapobieganie tworzeniu sesji na szynach 3.2.2 dla RESTful api

Mój problem polega na tym, że zapisuję sesje w bazie danych i jest ona zalewana podczas wielu wywołań interfejsu API.

Używam Rails 3.2.2 i Devise do uwierzytelniania.

+0

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

+0

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

+0

wszystko wskazuje na https://github.com/kares/session_off. to po prostu nie działa dla mnie. – refaelos

Odpowiedz

16

Mój problem tutaj był z Warden wewnątrz opracować. Musiałem "powiedzieć" strażnikowi, aby nie przechowywał użytkownika w sesji po uwierzytelnieniu użytkownika.

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

Mam nadzieję, że pomoże każdemu, kto zobaczy ten wątek.

+1

fajny. zaakceptuj odpowiedź. (lub mój :) –

+1

gdzie umieściłeś ten kod? – kain

+0

@kain Wierzę, że to przesłonięcie linii w Devise SessionsController utwórz akcję – Ben

1

Teoretycznie, jeśli go nie używasz, nie jest już załadowany. aż szynach 2.3.8, można zrobić:

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

protected 

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

teraz można zrobić to samo z tego klejnotu https://github.com/kares/session_off

+0

Próbowałem twoich rozwiązań i to nie działa. może wymyślić i session_off nie działa dobrze razem?! – refaelos

+0

Zauważ, że wtyczka tylko redefiniuje wywołanie sesji ze sterownika, wywołanie request.session nadal będzie pobierać sesję. Myślę, że devise (faktycznie warden) używa env ['rack.session'] :( –

+0

otrzymuję wiele błędów podczas używania session_off.i prawdopodobnie mam kilka wtyczek, które używają sesji. – refaelos

-3

należy użyć "devise: timeoutable" w modelu i używać config.timeout_in = 0 w config/inicjatorów/devise.rb

zrestartować serwer!

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