1

我需要为 Rails 设计一个 RESTful API,它可以从 Web 浏览器、智能手机、平板电脑等登录。当我登录时,它总是需要 X-CSRF-Token,所以每次我都需要使用会话或 cookie 信息。但是 REST api 应该是无状态的,这意味着不应该使用 cookie。有没有办法摆脱它?有什么建议吗?

4

1 回答 1

1

这是我在一个同时响应 HTML 和 JSON 的应用程序中处理这个问题的方法。我想要 CSRF 检查,除非它是来自受信任来源的 API 调用,所以

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery
  # has to come after the protect_from_forgery line
  skip_before_filter :verify_authenticity_token, :if => :api_request?

  # but don't just accept any URL with a .json extension, you need something else to
  # ensure your caller is trusted (in this case I test for a valid API key being passed)
  before_filter :api_key_valid?, :if => :api_request?

  def api_request?
    request.format == 'application/json'
  end

  # ... etc
end
于 2012-11-16T02:25:45.340 回答