首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在rails 3应用程序中调用.ajax方法时未经授权的401次

在rails 3应用程序中调用.ajax方法时未经授权的401次
EN

Stack Overflow用户
提问于 2013-02-20 08:41:50
回答 2查看 1.8K关注 0票数 3

我通过twitter引导模式窗口传递ajax调用来更新应用程序中的数据。ajax代码如下所示:

代码语言:javascript
运行
复制
  $(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“方法相匹配。我的方法中的代码如下:

代码语言:javascript
运行
复制
  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

所以在服务器日志中显示-

代码语言:javascript
运行
复制
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"并没有显示up...Now在搜索后我能够解决的警告,但仍然有401 present...How来解决这个问题吗??

提前谢谢..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 15:22:23

根据您的服务器日志,您没有传递CSRF令牌,因此rails自动认为请求是恶意的,并将其标记为未验证的请求。未验证请求的默认处理是重置会话。您可以注释掉protect_from_forgery或将skip_before_filter :verify_authenticity_token添加到您的控制器中以查看是否是这样吗?

如果希望在ajax请求中包含真实性令牌(强烈建议),可以将其添加到ajax请求的标题中:

代码语言:javascript
运行
复制
headers: {
      'X-Transaction': 'POST Example',
      'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
票数 3
EN

Stack Overflow用户

发布于 2016-05-20 03:21:58

skip_before_filter :authenticate_user!添加到控制器中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14975489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档