Ruby 2.6.0 无效的真实性令牌

Ruby 2.6.0 Invalid authenticity token

我的代码显示 "Invalid Authenticity" 而不是 "missing template"。我需要在程序中更改什么才能获得 "missing template error"? img1 img2 img3 errorImg

整个程序的参考如下: link to github resp

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end

new.html.erb 下面:

新视图

<form action="/users" method="post" accept-charset="UTF-8">
  <label for="username">Username:</label><br>
  <input id="username" name="user[username]" type="text" /><br>
  <label for="email">Email:</label><br>
  <input id="email" name="user[email]" type="text" /><br>
  <label for="password">Password:</label><br>
  <input id="password" name="user[password]" type="text" /><br>
  <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>"> 
  <input type="submit" value="Submit">
</form>

route.rb

Rails.application.routes.draw do
  resources :users, only: [:new, :create]
end

问题出在这一行:

 <input type="hidden" name="authenticity_token" value="form_authenticity_token %>">

这实际上应该是:

 <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">

否则,用于防止跨站点请求伪造攻击的真实性令牌将只是 'form_authenticity_token %>' 而不是真实令牌。

看起来你正试图用 config/application.rb

做 protect_from_forgery
config.api_only = true

如果您要像 API 一样使用您的应用,您应该像

一样重新生成它
$ rails new my_api --api

如果您需要更高的安全性,您可以将令牌存储在其他地方(不是 cookie 或会话)——例如,您可以使用 JWT 令牌。 为了更安全,您还可以使用 rack-cors gem 如果您不小心删除了资产并且不想使用 API,您可以将此配置设置为 false