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

Thinker1 · 2018年11月06日 · 最后由 Thinker1 回复于 2018年11月06日 · 1311 次阅读

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

1 楼 已删除

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

临时方案:手动关掉 csrf

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

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

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

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

Rei 回复

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

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

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

Rei 回复

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

Thinker1 回复

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

Rei 回复

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

Rei 回复

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

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

Rei 回复

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

Thinker1 关闭了讨论。 11月06日 21:53
Thinker1 重新开启了讨论。 11月06日 21:54
Thinker1 关闭了讨论。 11月07日 07:34
需要 登录 后方可回复, 如果你还没有账号请 注册新账号