ruby-on-rails - software - ruby on rails tutorial
Adición de la tienda de sesión de cookies de nuevo a la aplicación API Rails (3)
Debe eliminar estas declaraciones de middleware de su archivo application.rb
y agregar esto:
config.api_only = false
Esto habilitará la administración de la sesión de la forma que desee si hay un session_store
configurado en algún lugar de sus inicializadores (que tiene). Esto no está claramente documentado, pero eso es lo que se supone que debes hacer .
Ejemplo here .
Tengo una aplicación Rails-API. Más o menos "listo para usar" pero quiero volver a agregar el almacén de sesiones basado en cookies. Esto es lo que he hecho:
app / controllers / application_controller.rb
+ include ::ActionController::Cookies
config / application.rb
+ config.middleware.insert_after ActiveRecord::QueryCache, ActionDispatch::Cookies
+ config.middleware.insert_after ActionDispatch::Cookies, ActionDispatch::Session::CookieStore
config config / initializers / secret_token.rb
+ Namespace::Application.config.secret_token = ''token''
config config / initializers / session_store.rb
+ Namespace::Application.config.session_store :cookie_store, :key => ''_namespace_key''
Cuando inspecciono la sesión en un controlador resulta:
<Rack::Session::Abstract::SessionHash:0x3fdadc5daa24 not yet loaded>
Sin embargo, parece que los datos se escriben y se utilizan.
Pero, en mi navegador, la cookie en sí está siendo nombrada como ''_session_id'' en lugar de ''_namespace_key''
Pensé que volví a agregar todas las piezas necesarias para el almacenamiento de sesión basado en cookies, pero parece que me falta algo más. ¿Algunas ideas?
Esta línea se ignora porque no está utilizando la pila completa de Rails:
::Rails.application.config.session_store :cookie_store,
:key => ''_namespace_key''
Entonces, en lugar de eso, su sesión está usando la clave de sesión predeterminada establecida aquí . Sin embargo, puede pasar estos argumentos directamente reemplazando:
config.middleware.insert_after
ActionDispatch::Cookies, ActionDispatch::Session::CookieStore
con:
config.middleware.insert_after
ActionDispatch::Cookies, ActionDispatch::Session::CookieStore,
:key => ''_namespace_key''
Aquí hay una lista completa de opciones que puede pasar (con una idea aproximada de sus valores predeterminados, ya que algunas pueden ser anuladas por módulos en Rails).
Si está en Rails 5 y desea conservar config.api_only = true
, podría ampliar el middleware para agregar la capa de sesiones, agregando este código después de la class Application < Rails::Application
en config/application.rb
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore, key: ''_namespace_key''
Esto puede ser útil cuando desea tener una aplicación habilitada api-only
para api-only
Rails pero tiene que administrar sesiones de usuarios con un panel de administración como ActiveAdmin o Rails_Admin.