`
ScorpioX
  • 浏览: 949 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

经验:在Rails 2.3.2下使用Ajax出现的InvalidAuthenticityToken错误

阅读更多
把一个老的应用从Rails 2.2.2搬迁到2.3.2环境下之后,发现所有的Ajax请求都出InvalidAuthenticityToken访问错误,而且在所有浏览器平台都是这个问题。Rails代码里没什么特殊的设置,就是在environment.rb里设置一个session_key和secret,另外在controller里写了一句protect_from_forgery

经过多次跟踪尝试后,终于发现了问题所在:Rails 2.3.2的form_authenticity_token生成算法有所改变!
在2.2.2下,form_authenticity_token都是字母和数字构成,例如:  "757942043a3b2509365263ef66ff4589e61c2eaa",这样的字符在请求发送时不需要额外编码。
而2.3.2下,form_authenticity_token中出现了很多特殊字符,例如: "vfbzRs6tLb0xZ/cxaML85y+JODOE+P4klbzue0CIef8=",而我的JavaScript代码里没有加以编码。

最后,JS里加上一句encodeURIComponent(auth_token)就好了,所有的InvalidAuthenticityToken问题全部消失!

不大不小的教训,分享一下,作为前车之鉴!
分享到:
评论
2 楼 ScorpioX 2009-08-04  
我是用Ajax取回的的JSON串里包含的form_authenticity_token,不是在页面里取的。
render :json => { :token => form_authenticity_token }


其实输出UTF-8是会影响性能的,所以encoding这件事我觉得还是丢给前台的浏览器解决吧,毕竟服务器资源有限,而前台的负载相对很低的:)
1 楼 司徒正美 2009-07-16  
我永远是UTF-8

<%= javascript_tag "window._token = '#{form_authenticity_token}'" if ActionController::Base.allow_forgery_protection %>

application.js就可以
…………………………
            new Ajax.Request(action, {
                asynchronous:true,
                evalScripts:true,
                parameters:Form.serialize(this) + '&authenticity_token=' + window._token
            });
…………………………



相关推荐

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

    rails2.3.2gem本地安装包及使用说明

    Rails 2.3.2 是一个古老的 Ruby on Rails 框架版本,它在 Ruby 社区中曾经广泛使用。Gem 是 Ruby 的包管理器,用于安装和管理各种库和框架,包括 Rails。如果你无法通过网络升级或安装 Rails,可以采用本地安装包的...

    rails2.3.2 ExceptionNotifier 配置

    标题 "rails2.3.2 ExceptionNotifier 配置" 指的是在Rails 2.3.2版本中,如何设置和使用ExceptionNotifier插件。ExceptionNotifier是Rails的一个非常有用的gem,它允许开发者在应用程序中捕获并通知异常情况,如错误...

    rails2.3.2

    标题 "rails2.3.2" 指的是 Ruby on Rails 框架的一个特定版本,即 2.3.2。Ruby on Rails(通常简称为 Rails)是一个基于 Ruby 语言的开源 Web 应用程序框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...

    Rails3-使用ajax处理并发

    标题 "Rails3-使用ajax处理并发" 涉及的是在Ruby on Rails 3框架中如何利用Ajax技术处理并发请求。Rails是一个流行的Web应用程序开发框架,它基于Ruby语言,而Ajax(Asynchronous JavaScript and XML)则是一种允许...

    Rails Plugins:Extending Rails Beyond the Core

    Rails Plugins:Extending Rails Beyond the Core

    Ruby on Rails:部署Rails应用至Heroku.docx

    Ruby on Rails:部署Rails应用至Heroku.docx

    CanCan1Ruby2Devise3Rails4:在 Rails 4 上使用 CanCan 1 和 Devise 3 的应用程序

    ##设置 CanCan 1:Ruby 2:设计 3:Rails 4本指南部分是根据 Tony Amoyal 的教程 [here.] ( ) 创建的######创建一个新应用程序: rails new appbundle install ######安装设计: gem 'devise'bundle install rails ...

    跨越边界1:Ajax on Rails

    【标题】:“跨越边界1:Ajax on Rails” 【描述】:本文主要探讨了Ajax技术如何与Ruby on Rails框架相结合,创造出高度交互性的Web应用。Ajax技术利用XML、JavaScript和Web标准,通过异步通信增强用户体验,而Ruby...

    Ajax on Rails

    7. **局部更新视图**:Ajax的一个关键优势是能够更新页面的一部分。在Rails中,可以使用`remote: true`创建一个链接或表单,然后在控制器动作中返回更新视图的部分内容。 8. **JBuilder与ActiveModel Serializers**...

    ajax-rails

    Ajax(异步JavaScript和XML)是一种用于创建快速、动态网页的技术,它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。在Ruby on Rails框架中,Ajax被高度集成,提供了便捷的方法来实现...

    源代码 for web开发敏捷之道:应用rails进行敏捷web开发(原书第4版)

    11. **AJAX和JavaScript**:了解如何在Rails中集成异步请求,以及使用CoffeeScript或jQuery增强用户体验。 通过这些源代码,读者可以对照书中内容,逐步实现各个功能模块,遇到问题时可以直接查看代码实例,进行...

    跨越边界 Ajax on Rails

    《跨越边界 Ajax on Rails》这本书正是探讨如何在Rails框架下充分利用Ajax技术的宝贵资源。 **Ajax的基本原理** Ajax的核心是通过JavaScript与服务器进行异步通信,它包括以下几个关键组件: 1. **XMLHttpRequest...

    Ajax on Rails (PPT)

    #### 七、示例:Ajax Sea 文档提到了一个示例——“Ajax Sea”,但未给出详细内容。根据上下文推测,“Ajax Sea”可能是文档中用来演示如何利用Rails和Prototype实现Ajax功能的一个具体案例。该示例可能会涵盖以下...

    roar-rails:在Rails中使用Roar的代表

    使您在Rails应用程序中使用Roar的代表变得有趣。 咆哮轨道的开发将在未来停止,我们鼓励用户开始迁移到 (和 )。 Roar是用于解析和呈现REST文档的框架。 有关代表的更好的概述,请检查。 Roar-rails可为您提供...

    基于Rails2.2.2的ajax

    标题 "基于Rails2.2.2的ajax" 涉及的是使用Rails 2.2.2框架中的AJAX(Asynchronous JavaScript and XML)技术。Rails是一个基于Ruby编程语言的开源Web开发框架,它允许开发者以简洁、高效的方式构建动态网站。在...

    Beginning Google Maps Applications with Rails and Ajax From Novice to Professional.pdf

    ### 《从新手到专家:使用Rails与Ajax构建Google Maps应用》知识点概览 #### 一、书籍基本信息 - **作者**:Andre Lewis, Michael Purvis, Jeffrey Sambells 和 Cameron Turner - **出版日期**:2007年 - **ISBN-...

Global site tag (gtag.js) - Google Analytics