我正在将Liberty Reserve购物车集成到我的Rails应用程序中。调用LR(使用fork提交)工作正常,LR也会在成功发布后重定向回我的页面。但是当应用程序返回时,我的会话就会丢失。
该页面如下所示:
<form action="https://sci.libertyreserve.com/en" method="GET">
<input type="hidden" name="lr_acc" value="XXXXX">
<input type="hidden" name="lr_store" value="XXX">
<input type="hidden" name="lr_merchant_ref" value="1">
<input type="submit" value="Liberty Reserve"/>
</form>
LR工作的方式是,在用户成功预订了他的交易之后,LR重定向回我的网页,但我的身份验证失败,因为会话变量都已消失。
我认为它与rails应用程序所需的CSRF-TOKEN有关,但LR显然没有提供。
我是否可以停用某个特定网页/操作的CSRF内容,还是有其他解决方法?
答案 0 :(得分:6)
我开始将Rails作为Facebook应用程序开始并通过Koala Lib。我在某处读到了关闭“保护免受伪造”的功能
对于测试,您只需在ApplicationController中注释掉protect_from_forgery,但只是为了查看它是否适合您。 class ApplicationController&lt;的ActionController :: Base的 #protect_from_forgery
如果可行,您可以尝试为您的特定控制器/ actionHere制作例外。 http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
小心点。它可能是一个更容易处理的漏洞。 http://ruby.about.com/od/security/a/forgeryprotect.htm
答案 1 :(得分:2)
你使用过表格标签吗?
<%= form_tag do %>
Form contents
<% end %>
其他观点
<%= form_tag(c_add_path, method: 'post', enctype: 'multipart/form-data', style: 'text-align: left;') do %>
Form contents
<% end %>
此标记使用会话密钥生成html,因此您可以使用POST而不会丢失会话