新手问题 参照 Rails 教程在 toy_app 中创建新用户时报错 ActionController::InvalidAuthenticityToken

Thinker1 · November 06, 2018 · Last by Thinker1 replied at November 06, 2018 · 1311 hits

参考 Ruby on rails 5 Tutorial 4th 教程,在第二章 toy_app 中,new user 发生错误。Google 半天还是没能解决。 错误信息如下:

1 Floor has deleted

把代码放到 github,一定是漏了东西。一楼的设置是关掉安全防护,不安全。

临时方案:手动关掉 csrf

... 1 楼、3 楼在误导人

😓 1、3 楼都是逃避问题 把提出问题的干掉

😨 大佬们都是怎么干的,我一般遇到跨域直接加过滤器忽略 authenticate_token。。。。

Reply to huacnlee

正解在哪?比如漏掉了哪些东西

现在已经解决,来自于 stackoverflow 原因:暂时不是很清楚。说是在 Chrome 和 Opera 游览器中会出现问题,在 Firefox 和 IE 中没有该问题。 本人使用的是 Opera 游览器。出现错误。 解决方法:在 user_controller.rb 中添加一行代码,protect_from_forgery 既可解决

class UsersController < ApplicationController
  protect_from_forgery
  ....

参考文章:https://stackoverflow.com/questions/21873164/when-i-try-to-create-user-rails-says-actioncontrollerinvalidauthenticitytoken

新手遇到这个问题最常见的原因:

  1. app/views/layouts/application.html.erb 里面误删了 <%= csrf_meta_tags %>
  2. app/assets/javascripts/application.js 里面误删了 // require rails-ujs
  3. 其它具体分析,但可能性已经很小。

楼主搜到一个“方案”不去了解原理就认为“解决了”,不是好的学习习惯。

引申阅读:

Ruby on Rails 安全指南 / 3 跨站请求伪造(CSRF) https://ruby-china.github.io/rails-guides/security.html#cross-site-request-forgery-csrf

Reply to Rei

好的,谢谢大佬。受教了😀 User 资源是使用命令行自动生成的。在更换游览器后就没有发生该错误了。 的确是您发的这两个原因,应该是 cookie 造成的,刚开始学不懂的地方确实很多。

$ rails generate scaffold User name:string email:string #利用脚手架生成User资源
$ rails db:migrate #迁移数据库
Reply to Thinker1

我二楼已经叫你上传代码了,一定是漏了东西,关掉 CRSF 和 8 楼的操作都不是解决方法。

Reply to Rei

是的,谢谢大佬了。 应该是自动生成的代码里少了这一部分,我现在加上去试试。非常感谢大佬。

Reply to Thinker1

自动生成是不会漏的,除非你删了什么。

Reply to Rei

但我实在是没有删除,这两个我刚刚看了下也都有。

Reply to Rei

我把代码上传到 bitbucket 上面了,大佬您有时间看看😀 非常感谢。 https://github.com/Noprint/toy_app

现在看起来代码没问题,还有问题吗?

Reply to Rei

没有了,非常感谢大佬。 之前就是被 Ruby 社区的氛围所吸引。非常感谢大佬😀

Thinker1 closed this topic. 06 Nov 21:53
Thinker1 reopened this topic. 06 Nov 21:54
Thinker1 closed this topic. 07 Nov 07:34
You need to Sign in before reply, if you don't have an account, please Sign up first.