0

我的代码显示“无效的真实性”而不是“缺少模板”。我需要在程序中进行哪些更改才能获得“缺少模板错误”? 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>

路由.rb

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

2 回答 2

1

看起来您正在尝试使用 config/application.rb 进行protect_from_forgery

config.api_only = true

这是您描述的情况

如果您将应用程序用作 API,您应该像这样重新生成它

$ rails new my_api --api

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

于 2019-01-27T00:57:07.903 回答
0

问题出在这一行:

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

这实际上应该是:

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

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

于 2019-01-27T00:27:47.380 回答