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

ApiRequest代わりに、引数としてセッショントークンを渡すのはどうですか?次に、コントローラーで使用する簡単な方法で呼び出しをまとめることができます。

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

これには、セッションパラメーターがコントローラーレベルで保持されるという利点があり、モデル内の状態情報を保持する必要がなくなります(おそらくそうではないはずです)。

于 2013-01-06T02:40:31.260 に答える