2013-02-20 52 views
3

我正在通過ajax調用通過twitter引導模式窗口更新我的應用程序中的數據。阿賈克斯代碼如下:401在Rails 3應用程序中調用.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 
      } 
      }); 

     }); 
     }); 

我修改了route.rb文件,使其與我的控制器「update_link」方法相匹配。 在我的方法的代碼如下: -

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 ...如何解決這個問題?

在此先感謝....

回答

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') 
} 
+0

我試了兩個。當我在我的ajax調用中添加「header:」時仍然顯示401錯誤。但是,當我添加「skip_before_filter:verify_authenticity_token」它實際上是在做這項工作,但仍然在螢火蟲顯示「406不可接受」的錯誤。無論如何,這可能是我的ajax回調代碼中的問題。我正在研究它。謝謝你的幫助。 – Siddharth 2013-02-21 05:05:42

1

添加skip_before_filter :authenticate_user!到控制器。

相關問題