Rails 5 API模式与ActionDispatch :: Cookies

Tal*_*boy 3 ruby ruby-on-rails ruby-on-rails-4 ruby-on-rails-5

我有一个Rails 5 API,我需要使用该cookies方法.

我需要存储前端使用的cookie和一些基本的用户数据(不是服务器会话状态).

我有这个 application.rb

config.middleware.insert_after ActionDispatch::Callbacks, ActionDispatch::Cookies
Run Code Online (Sandbox Code Playgroud)

我打电话时它会正常显示 rake middleware

但这仍然发生......

NameError (undefined local variable or method `cookies' for #<SessionsController:0x007fe96fd671e8>):
Run Code Online (Sandbox Code Playgroud)

调节器

class SessionsController < ApplicationController

  def login
    ...
    add_login_headers(current_company.id, user.id, user.format_rights)
    ...
  end

  private

  def add_login_headers(company_id, user_id, rights)
    ...

    cookies.permanent[Settings.cookies.app] = {
      value: JSON.generate(company_id: company_id, user_id: user_id, rights: rights),
      secure: true
    }
  end

end
Run Code Online (Sandbox Code Playgroud)

Tal*_*boy 6

我已经修复了这种贫民窟的方式,所以我不需要包括50,000个额外的助手.

def cookies
  # helpers not available in --api mode
  request.cookie_jar
end
Run Code Online (Sandbox Code Playgroud)


dow*_*owi 5

你需要添加这个控制器模块:

class ApplicationController < ActionController::API
  include ActionController::Cookies
Run Code Online (Sandbox Code Playgroud)