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」であるパラメーターのセットのコンソールから見ることができますが、これは 1 つですか? はいの場合、どのように生成/定義されていますか? 私が見る限り、それは毎回同じです。
また、別のアプリケーション (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 でチェックされるようにするにはどうすればよいですか?
私の質問を手伝ってくれてありがとう!:)