복붙노트

[RUBY-ON-RAILS] 레일 API 응용 프로그램에 추가 쿠키 세션 저장소를 다시

RUBY-ON-RAILS

레일 API 응용 프로그램에 추가 쿠키 세션 저장소를 다시

나는 레일-API 응용 프로그램을 가지고있다. 더 많은 이하 "상자 밖으로"그러나 나는 다시 쿠키 기반 세션 저장소를 추가 할. 여기에 내가 무슨 짓을했는지 있습니다 :

응용 프로그램 / 컨트롤러 / application_controller.rb

+ include ::ActionController::Cookies

설정 / application.rb

+ config.middleware.insert_after ActiveRecord::QueryCache, ActionDispatch::Cookies
+ config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore

생성 설정 / 초기화 / secret_token.rb

+ Namespace::Application.config.secret_token = 'token'

생성 설정 / 초기화 / session_store.rb

+ Namespace::Application.config.session_store :cookie_store, :key => '_namespace_key'

내가 컨트롤러에서 세션을 검사 할 때 결과 :

<Rack::Session::Abstract::SessionHash:0x3fdadc5daa24 not yet loaded>

그러나 해당 데이터가 기록되고 사용되는 표시한다.

그러나, 브라우저에서 쿠키 자체는 '_session_id'대신 '_namespace_key'로 명명되고있다

나는 쿠키 기반 세션 저장에 필요한 모든 부분을 다시 추가 생각하지만 난 뭔가 다른 누락 한 것으로 나타났습니다. 어떤 아이디어?

해결법

  1. ==============================

    1.당신은 당신의 application.rb 파일에서 이러한 미들웨어 선언을 제거하고이를 추가해야합니다 :

    당신은 당신의 application.rb 파일에서 이러한 미들웨어 선언을 제거하고이를 추가해야합니다 :

    config.api_only = false
    

    (당신이) 당신의 initialisers의 구성 session_store의 어딘가가있는 경우이 세션 관리 당신이 원하는 방식을 가능하게 할 것이다. 이 명확하게 문서화되어 있지 않습니다,하지만 당신은 어떻게해야하는지입니다.

    여기 예.

  2. ==============================

    2.당신이 레일 (5)에있어, 그리고 유지하려는 config.api_only 진정한 = 경우에 당신은 설정 / application.rb에서 클래스 응용 프로그램 <레일 : 응용 프로그램 후이 코드를 추가, 세션 레이어를 추가 할 수있는 미들웨어를 확장 할 수

    당신이 레일 (5)에있어, 그리고 유지하려는 config.api_only 진정한 = 경우에 당신은 설정 / application.rb에서 클래스 응용 프로그램 <레일 : 응용 프로그램 후이 코드를 추가, 세션 레이어를 추가 할 수있는 미들웨어를 확장 할 수

    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore, key: '_namespace_key'
    

    이것은 당신이 갖고 싶어 할 때 API 만 사용 가능 응용 프로그램을 레일 편리하지만 ActiveAdmin을 또는 Rails_Admin 같은 관리 패널 사용자 세션을 관리 할 수 ​​있습니다.

  3. ==============================

    3.당신은 전체 레일 스택을 사용하지 않기 때문에이 라인은 무시된다 :

    당신은 전체 레일 스택을 사용하지 않기 때문에이 라인은 무시된다 :

    ::Rails.application.config.session_store :cookie_store,
      :key => '_namespace_key'
    

    그래서 그 대신, 세션은 여기에서 설정 한 기본 세션 키를 사용하고 있습니다. 그러나, 당신은 대체하여 직접 이러한 인수를 전달할 수 있습니다 :

    config.middleware.insert_after 
      ActionDispatch::Cookies, ActionDispatch::Session::CookieStore
    

    와:

    config.middleware.insert_after
      ActionDispatch::Cookies, ActionDispatch::Session::CookieStore,
      :key => '_namespace_key'
    

    (일부는 레일 모듈 오버라이드 (override) 할 수 있기 때문에 기본값의 거친 아이디어,) 여기에 전달할 수있는 옵션의 전체 목록입니다.

  4. from https://stackoverflow.com/questions/15342710/adding-cookie-session-store-back-to-rails-api-app by cc-by-sa and MIT license