2013-09-24 22 views
11

Używam klejnotu rails_api w moim projekcie. Chcę dodać zarządzanie sesją do uwierzytelniania, ale wygląda na to, że sesja nie działa. Oto moja konfiguracja w config/initializer/session_store.rb:Sesja w klejnocie Rails_API

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

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

dodałem config.api_only = false w application.rb (Adding cookie session store back to Rails API app)

iw moim session_controller dodałem sesji do przechowywania 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 

Kiedy w application_controller, ja chcesz uzyskać dostęp do session[:token], ale wynikiem jest 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

Mam ten sam problem. Wycofany dla zwiększenia ekspozycji. – sjmog

+0

Czy rozwiązałeś problem? https://github.com/rails-api/rails-api/pull/97 – enricostn

+0

Pozostawiając to dla odniesienia: https://github.com/rails-api/rails-api/issues/73 – jottr

Odpowiedz

0

Pmcapi :: Application.config.session_store: cookie_store, klucz: '_pmcapi_session', expire_after: 1.hour można spróbować to w config/inicjator/session_store.rb

1

z tego co widzę z linia config.api_only = false to w zasadzie czyni szyny korzystać z pełnej stos raczej niż utrzymanie go szczupły, co jest głównym powodem można używać rails-api więc proponuję spróbować czegoś jak

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

w kontrolerze aplikacji.

Jeśli to nie pomoże polecam rysunek uwagę na This pull request about session management in the rails 4 stack

+0

Wezmę to krok dalej: 'config.middleware.use ActionDispatch :: Pliki cookie; config.middleware.use ActionDispatch :: Session :: CookieStore', a następnie, oczywiście, będziesz musiał skonfigurować oba - daj mi znać, jeśli chcesz mieć przykład ich konfiguracji, a ja opublikuję go w osobnej odpowiedzi. Jeśli to zrobisz, łatwiej będzie zintegrować 'devise'. –

0

zawsze wolą używać dobrze obsługiwane i udokumentowane kamienie zamiast napisać własny kod. Przyczyny tego są:

  1. To oszczędza czas
  2. to oszczędność pieniędzy
  3. Jest bardziej linkujących
  4. Inni programiści, którzy pracują nad projektami będą bardziej prawdopodobne znać co wdrożyliśmy .
  5. Jest to bezpieczniejsze, ponieważ (przynajmniej w moim przypadku) o wiele więcej osób z większym doświadczeniem niż ja, pracowałem nad nim od wielu lat.

Z wszystkich, że z drogi Gorąco polecam użyć Devise lub jeden z pozostałych ugruntowaną klejnotów uwierzytelniania zamiast walczyć z tego typu rzeczy na własną rękę.

znalazłem ten artykuł okazał się pomocny

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