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
我的代码显示 "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_forgeryconfig.api_only = true
如果您要像 API 一样使用您的应用,您应该像
一样重新生成它$ rails new my_api --api
如果您需要更高的安全性,您可以将令牌存储在其他地方(不是 cookie 或会话)——例如,您可以使用 JWT 令牌。 为了更安全,您还可以使用 rack-cors gem 如果您不小心删除了资产并且不想使用 API,您可以将此配置设置为 false