我刚刚接触到 Rails 的protect_from_forgery,我为我的应用程序编写了一个简单的登录信息,如下所示:
客户端
<h1>Login</h1>
<%= form_for :session do |f| %>
<p>
<%= f.label :id %><br />
<%= f.text_field :id %>
</p>
<p>
<%= f.label :pw %><br />
<%= f.text_field :pw %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
在服务器端,在我的 application_controller.rb 我有
protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
我已经尝试从页面登录,似乎还可以;至少我可以登录。但是,我有几个问题要问(我在 win OS 上)
我找不到关于protect_from_forgery 选项的任何细节;如果有任何一方能详细解释以下选项,我将不胜感激:null_session, if: Proc.new { |c| c.request.format == '应用程序/json' }
如何判断我的表单是否正在使用并通过 CSRF 身份验证?我可以从控制台的参数集中看到发送的表单有一个“authenticity_token”,是这个吗?如果是,它是如何生成/定义的?正如我所看到的,每次都是一样的。
另外,我有另一个应用程序(用 Unity3D c# 编写)在下面执行,连接到同一台服务器:
WWWForm form = new WWWForm();
form.AddField("id", id);
form.AddField("pw", pw);
WWW www = new WWW(mainUrl + "login/", form);
这一次,我的客户端仍然可以登录,但是从控制台我可以看到有如下警告
WARNING: Can't verify CSRF token authenticity
我已经对此进行了谷歌搜索,但似乎大多数答案是说我应该添加skip_before_filter :verify_authenticity_token
,但这只会绕过安全检查,不是吗?但是我需要在这里进行安全检查,所以这对我来说毫无意义......
我该如何解决这个问题并确保使用protect_from_forgery 检查我的登录会话?
提前感谢大家帮助我解决我的问题!:)