3

Twitter ブートストラップ モーダル ウィンドウを介してアプリケーションのデータを更新する ajax 呼び出しを渡しています。ajax コードを以下に示します。

  $(document).ready(function(){
    var link=$('#link_hash').val();
  $("#update_link").click(function(){
    console.log("I'm here");
     $.ajax({
            url: "profiles/update_link",
            type: "POST",
            dataType: "html",
            data: {link: link,data: $('#link_hash').val() },
            success: function(data) {
              // some code
            },
            error: function(data1) {
              // some code
             }
            });

        });
      });

コントローラーの「update_link」メソッドに一致するように、route.rb ファイルを変更しました。私の方法のコードは以下のとおりです:-

  def update_link
    @link=Link.find_by_link(params[:link])
    @tlink=Link.find_by_link(params[:data])
    logger.info "=========kkkkkkkkkkkkkk=================================#{@link.inspect}"
    logger.info "=========kkkkkkkkkkkkkk=================================#{@tlink.inspect}"
    logger.info "=========kkkkkkkkkkkkkk=================================#{params.inspect}"

    respond_to do |format|
      if @tlink.nil? 
         @link.update_attributes(:link => params[:data])

        ...some code....
      else
    ...some code...
      end
    end
  end
end

したがって、サーバーログに表示されています-

Started POST "/profiles/update_link" for 127.0.0.1 at 2013-02-20 12:08:20 +0530
Processing by ProfilesController#update_link as HTML
  Parameters: {"link"=>"9bfzjp", "data"=>"9bfzjpaaa"}
WARNING: Can't verify CSRF token authenticity
Completed 401 Unauthorized in 6ms

明らかに「logger.info」は表示されません...検索後、警告を解決できましたが、まだ401が存在します...これを解決するには??

前もって感謝します....

4

2 に答える 2

3

サーバーログによると、CSRFトークンを渡していないため、レールは自動的にリクエストを悪意のあるものと見なし、未検証としてフラグを立てます. 検証されていないリクエストのデフォルトの処理は、セッションをリセットすることです。コメントアウトするか、コントローラーにprotect_from_forgery追加して、それが当てはまるかどうかを確認できますか?skip_before_filter :verify_authenticity_token

Ajax リクエストに認証トークンを含めたい場合 (強くお勧めします)、ajax リクエストのヘッダーに追加できます。

headers: {
      'X-Transaction': 'POST Example',
      'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
于 2013-02-20T15:22:23.917 に答える
1

コントローラーに追加skip_before_filter :authenticate_user!します。

于 2016-05-20T03:21:58.390 に答える