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