Adding cookie session store back to Rails API app

后端 未结 4 677
天命终不由人
天命终不由人 2020-11-29 02:13

I have a Rails-API app. More or less \"out of the box\" but I want to add back cookie-based session store. Here is what I\'ve done:

app/controllers/application_contr

相关标签:
4条回答
  • 2020-11-29 02:48

    This line is ignored because you are not using the full Rails stack:

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

    So instead, your session is using the default session key set here. However, you can pass these arguments directly by replacing:

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

    with:

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

    Here's a full list of options you can pass (with a rough idea of their defaults, since some may be overridden by modules in Rails).

    0 讨论(0)
  • 2020-11-29 02:49

    You need to remove these middleware declarations from your application.rb file and add this:

    config.api_only = false
    

    This will enable session management the way you want if there is a configured session_store somewhere in your initialisers (which you have). This isn't clearly documented, but that's what you're supposed to do.

    Example here.

    0 讨论(0)
  • 2020-11-29 02:52

    If you're on Rails 5, and want to preserve config.api_only = true you could extend the middleware to add the sessions layer, adding this code after class Application < Rails::Application in config/application.rb

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

    This could come in handy when you want to have a rails api-only enabled app but have to manage user sessions with an administration panel like ActiveAdmin or Rails_Admin.

    0 讨论(0)
  • 2020-11-29 03:10

    This worked for me in Rails 6.0, application.rb:

    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore
    config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore)
    

    If you want to set custom key (yes, it has to be set twice):

    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore, key: '_your_app'
    config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, key: '_your_app')
    

    And lastly, if you want to add expiration date - it's done here:

    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore, key: '_your_app', expire_after: 20.years 
    config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, key: '_your_app')
    

    Would have loved linking to documentation, but there's none.

    0 讨论(0)
提交回复
热议问题