1

我有一个与 API 通信的无数据库 Rails 应用程序。

对于身份验证,我将用户凭据发送到 api 并在成功时接收会话令牌。随后,我发出的每个 api 请求都应包含该令牌。

api_request.rb:

class ApiRequest

  def initialize(relative_path,params={})
    params = _add_base_data params
    send_request relative_path, params
  end

  private
  def send_request(relative_path,params)
    conn = Faraday.new(:url => MyApp::Application.config.server) do |faraday|
      faraday.request  :url_encoded
      faraday.response :logger
      faraday.adapter  Faraday.default_adapter
    end

    encoded = conn.post relative_path,params
    @data = JSON.parse encoded.body
    @data
  end

  def _add_base_data params
    params[:session_token] = ?
    params
  end
end

my_session.rb:

class MySession
   def login? email,pass
      params = { :email => email, :password => pass }
      resp = ApiRequest.new '/user/login', params 
      if resp.failed?
        false
      else
        @session[:token] = resp.data['session_token']
        true
      end
    end
end

如何使会话令牌可用于每次调用的 ApiRequest 模型?

4

1 回答 1

1

将会话令牌作为参数传递给 theApiRequest怎么样?然后,您可以将调用包装在一个简单的方法中,以便在您的控制器中使用:

# in base controller class
def api(resource, params)
  ApiRequest.new @session[:token], '/user/login', params 
end

这样做的好处是会话参数保持在控制器级别,从而消除了在模型中保留状态信息的需要(可能不应该存在的地方)。

于 2013-01-06T02:40:31.260 回答