2012-05-23 10 views
12

Come posso impedire all'archivio sessioni di creare una sessione su chiamate JSON/XML?Prevenzione della creazione di sessioni su rails 3.2.2 per RESTful api

Il mio problema è che salvi le sessioni in un database e viene allagato su più chiamate API.

Sto utilizzando Rails 3.2.2 e Devise per l'autenticazione.

+0

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

+0

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

+0

tutto sta puntando su https://github.com/kares/session_off. semplicemente non funziona per me. – refaelos

risposta

16

Il mio problema qui era con Warden all'interno Devise. Ho dovuto "dire" a Warden di non memorizzare l'utente nella sessione dopo che l'utente è stato autenticato.

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

Spero che aiuti chi vede questo thread.

+1

nice one. accetti la tua risposta. (o il mio :) –

+1

dove hai inserito questo codice? – kain

+0

@kain credo che questo sia l'override di una linea in Devise SessionsController create action . – Ben

1

in teoria se non lo si utilizza, non è caricato ora. fino rotaie 2.3.8, si potrebbe fare:

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

protected 

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

ora si può fare lo stesso con questo gioiello https://github.com/kares/session_off

+0

ho provato le tue soluzioni e non funziona. forse escogitare e session_off non funziona bene insieme ?! – refaelos

+0

nota che il plugin ridefinisce solo la chiamata di sessione dal controller, la chiamata request.session continuerà a recuperare la sessione. Penso che ideare (in realtà warden) usi env ['rack.session'] :( –

+0

sto ricevendo più errori quando uso session_off. Ho probabilmente diversi plugin che usano la sessione .. – refaelos

-3

Si dovrebbe usare "devise: timeoutable" nel modello e utilizzare config.timeout_in = 0 in config/inizializzatori/devise.rb

Riavviare il server!

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