Rails 5 API Omniauth 使用 ActiveRecord 会话存储
Rails 5 API Omniauth use ActiveRecord Session Store
目前我们正在使用 Omniauth 和 DeviseTokenAuth 实施 Rails 5 API。
初始部分似乎工作得很好,但是当尝试验证令牌并做任何进一步的事情时,我们收到 CookieOverflow 错误。我们推断这是由于我们从 Omniauth 登录中存储了 >4KB 的信息。
我们试图转向数据库存储的会话,但继续从 Omniauth 收到错误
NoSessionError: You must provide a session to use OmniAuth
我们正在使用
gem 'activerecord-session_store'
我们的数据库迁移如下
class AddSessionsTable < ActiveRecord::Migration
def change
create_table :sessions do |t|
t.string :session_id, :null => false
t.text :data
t.timestamps
end
add_index :sessions, :session_id, :unique => true
add_index :sessions, :updated_at
end
end
最后我们确实在 config/application.rb 上设置了会话存储
config.session_store :active_record_store, :key => '_my_app_session'
我不确定为什么会继续收到“您必须提供会话才能使用 OmniAuth”的错误。如果我们将其切换回 cookiestore
config.middleware.use ActionDispatch::Flash
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
应用识别会话但抛出 CookieOverflow 错误。
您需要在 application.rb 文件中设置 config.api_only=false
。会话存储的中间件仅在设置为 false 时添加。
手动添加中间件不起作用,因为在这种情况下中间件未正确实例化。
您可以在此处查看 Rails 中的代码:https://github.com/rails/rails/blob/92703a9ea5d8b96f30e0b706b801c9185ef14f0e/railties/lib/rails/application/default_middleware_stack.rb#L58
目前我们正在使用 Omniauth 和 DeviseTokenAuth 实施 Rails 5 API。
初始部分似乎工作得很好,但是当尝试验证令牌并做任何进一步的事情时,我们收到 CookieOverflow 错误。我们推断这是由于我们从 Omniauth 登录中存储了 >4KB 的信息。
我们试图转向数据库存储的会话,但继续从 Omniauth 收到错误
NoSessionError: You must provide a session to use OmniAuth
我们正在使用
gem 'activerecord-session_store'
我们的数据库迁移如下
class AddSessionsTable < ActiveRecord::Migration
def change
create_table :sessions do |t|
t.string :session_id, :null => false
t.text :data
t.timestamps
end
add_index :sessions, :session_id, :unique => true
add_index :sessions, :updated_at
end
end
最后我们确实在 config/application.rb 上设置了会话存储
config.session_store :active_record_store, :key => '_my_app_session'
我不确定为什么会继续收到“您必须提供会话才能使用 OmniAuth”的错误。如果我们将其切换回 cookiestore
config.middleware.use ActionDispatch::Flash
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
应用识别会话但抛出 CookieOverflow 错误。
您需要在 application.rb 文件中设置 config.api_only=false
。会话存储的中间件仅在设置为 false 时添加。
手动添加中间件不起作用,因为在这种情况下中间件未正确实例化。
您可以在此处查看 Rails 中的代码:https://github.com/rails/rails/blob/92703a9ea5d8b96f30e0b706b801c9185ef14f0e/railties/lib/rails/application/default_middleware_stack.rb#L58