Ruby on rails RoR UI&;Web服务:围绕防止伪造而工作

Ruby on rails RoR UI&;Web服务:围绕防止伪造而工作,ruby-on-rails,web-services,rest,Ruby On Rails,Web Services,Rest,然而,我想使用我的RoR应用程序来处理UI和ReSTful API请求 我遇到问题是因为protect\u from\u fackery标志。我不希望API用户必须存储cookie或必须传递真实性\u令牌;而且,我希望能够对UI和API使用相同的ReSTful查询。比如说, https://host.domain.com/user/show/1 https://host.domain.com/user/create 应用程序控制器需要检查是否正在进行API调用,然后 不要调用防止伪造标志。比如

然而,我想使用我的RoR应用程序来处理UI和ReSTful API请求 我遇到问题是因为
protect\u from\u fackery
标志。我不希望API用户必须存储cookie或必须传递
真实性\u令牌
;而且,我希望能够对UI和API使用相同的ReSTful查询。比如说,

https://host.domain.com/user/show/1
https://host.domain.com/user/create
应用程序控制器需要检查是否正在进行API调用,然后 不要调用
防止伪造
标志。比如:

skip_before_filter :verify_authenticity_token, :only => :api
但是这里的
:api
是一个动作,我需要绘制一条新路线。我认为这不允许我使用与UI相同的控制器和操作

所以我很困惑,也不确定如何解决这个问题。这当然是一个共同的问题
这是许多其他人不得不解决的问题。我非常感谢大家能提供的任何帮助。

这里有一个令人讨厌的想法:跳过before过滤器,进行所有操作。然后添加一个新的过滤器

def verify_authenticity_token_or_api
  api? || verify_authenticity_token
end
api
方法中,计算该请求是否为api请求。小心不要让人们通过发出看起来有点像api请求的请求来绕过伪造保护-如果存在看起来像api请求的请求,您可能希望执行类似于使用户会话无效的操作


另一种方法是为API提供专用的端点和控制器。虽然rails免费为您提供的东西很吸引人,但有时您想要公开的资源与您的模型并不完全对应

这里有一个令人讨厌的想法:跳过所有操作的before过滤器。然后添加一个新的过滤器

def verify_authenticity_token_or_api
  api? || verify_authenticity_token
end
api
方法中,计算该请求是否为api请求。小心不要让人们通过发出看起来有点像api请求的请求来绕过伪造保护-如果存在看起来像api请求的请求,您可能希望执行类似于使用户会话无效的操作


另一种方法是为API提供专用的端点和控制器。虽然rails免费提供给您的东西很吸引人,但有时您想要公开的资源并不完全符合您的模型

您的建议效果非常好。我真的很感谢你的帮助。我到处都找不到答案。我想很多人以前都遇到过这个问题,不得不想出一个解决方案。再次感谢!你的建议非常有效。我真的很感谢你的帮助。我到处都找不到答案。我想很多人以前都遇到过这个问题,不得不想出一个解决方案。再次感谢!