2013-09-24 3 views
11

Ich verwende den Rails_api Edelstein in meinem Projekt. Ich möchte die Sitzungsverwaltung für die Authentifizierung hinzufügen, aber es scheint, dass die Sitzung nicht funktioniert. Hier ist meine Konfiguration in config/initializer/session_store.rb:Sitzung in Rails_API Edelstein

Pmcapi::Application.config.session_store :cookie_store, { 

    key: '_pmcapi_session', 
    expire_after: 1.hour 
} 

Ich habe config.api_only = false in application.rb (Adding cookie session store back to Rails API app)

und in meinem session_controller, fügte ich Sitzung der Token

# session_controller.rb 
def create 
    #just to generate new token 
    user.reset_sso_token! 
    session[:token] ||= user.sso_token 
    self.current_user = user 
    redirect_to root_path 
end 

Wenn in application_controller zu speichern, ich möchte auf session[:token] zugreifen, aber das Ergebnis ist nil:

# application_controller.rb 
def authenticate_user! 
    #puts("User Authentication") 
    #puts(request.authorization) 
    #puts(request) 
    @user = User.authenticate_with_token(session[:token]) 
    #head :unauthorized unless @user.present? 
    redirect_to sign_in_path if @user.nil? 
end 
+0

Ich bin mit dem gleichen Problem. Upvoted für erhöhte Exposition. – sjmog

+0

Haben Sie das Problem gelöst? https://github.com/rails-api/rails-api/pull/97 – enricostn

+0

Auch diese als Referenz: https://github.com/rails-api/rails-api/issues/73 – jottr

Antwort

0

Pmcapi :: Application.config.session_store: cookie_store, Schlüssel: '_pmcapi_session', expire_after: 1.hour können Sie versuchen, diese in config/initializer/session_store.rb

1

von dem, was ich aus sehen kann Ihre config.api_only = false Linie macht dies grundsätzlich Schienen den vollständigen Stack verwenden, anstatt es schlank zu halten, was der Hauptgrund ist, dass Sie rails-api I

config.middleware.use Rack::Session::Cookie 

in Ihrer Anwendung Controller schlagen versuchen, so etwas wie So verwenden könnte.

Wenn das nicht funktioniert, empfehle ich Ihre Aufmerksamkeit auf This pull request about session management in the rails 4 stack

+0

Ich würde dies nehmen ein Schritt weiter: 'config.middleware.use ActionDispatch :: Cookies; config.middleware.use ActionDispatch :: Session :: CookieStore', und dann müssen Sie natürlich beide konfigurieren - lassen Sie mich wissen, wenn Sie ein Beispiel für die Konfiguration von ihnen wollen, und ich werde es in einer separaten Antwort veröffentlichen. Wenn Sie dies tun, wird es einfacher sein, "devise" zu integrieren. –

0

Zeichnung Ich bevorzuge immer gut unterstützt und dokumentiert Edelsteine ​​zu verwenden, anstatt meinen eigenen Code zu schreiben. Die Gründe dafür sind:

  1. Es spart Ihnen Zeit
  2. Es spart Geld
  3. Es ist besser verwaltbar
  4. Andere Programmierer, die an Ihren Projekten arbeiten eher vertraut sein mit dem, was Sie implementiert haben .
  5. Es ist sicherer, weil (zumindest in meinem Fall) viele mehr Menschen mit mehr Erfahrung als ich, seit einigen Jahren daran arbeiten.

Mit allen, dass der Weg aus der ich sehr empfehlen Sie verwenden Devise oder einer der anderen etablierten Authentifizierungs gems statt ringen mit dieser Art der Sache auf eigene Faust.

fand ich diesen Artikel hilfreich

http://www.emilsoman.com/blog/2013/05/18/building-a-tested/