【发布时间】:2022-03-25 08:46:04
【问题描述】:
我是 ruby on rails 的新手。这里我试图将 html 表单发布到 ruby on rails (5.2.3 版本) 为此,我参考了此处找到的解决方案link
<form accept-charset="UTF-8" method='post' action='http://localhost:3000/user1s'>
<label for='name'>Name</label>
<input type="text" name='name' placeholder='Enter your name'> <br>
<label for='password'>password</label>
<input type="text" name='password' placeholder='Enter your password'> <br>
<label for='email'>confirm pass</label>
<input type="text" name='password_confirmation' placeholder='Enter your password_confirmation'> <br>
<input type="submit" value='Save'>
</form>
user1 控制器
class User1sController < ApplicationController
# POST /user1s
# POST /user1s.json
def create
@name = params[:name]
@password = params[:password]
@password_confirmation = params[:password_confirmation]
@user1 = User1.new(name=>@name, password=>@password , password_confirmation=>@password_confirmation)
respond_to do |format|
if @user1.save
format.html { redirect_to @user1, notice: 'User1 was successfully created.' }
format.json { render :show, status: :created, location: @user1 }
#format.json {status: :created }
else
format.html { render :new }
format.json { render json: @user1.errors, status: :unprocessable_entity }
end
end
end
end
这里是 config/routes.rb
Rails.application.routes.draw do
#resources :user1s
post '/user1s', to: 'user1s#create', as: 'user1s'
end
当我运行代码时出现以下错误
浏览器为打开了基于来源的伪造保护的请求返回了“空”来源。 这通常意味着您启用了 'no-referrer' Referrer-Policy 标头,或者 该请求来自一个拒绝提供其来源的网站。 这使得 Rails 无法验证请求的来源。 可能最好的解决方案是将您的推荐人政策更改为不那么严格的政策,例如 同源或严格同源。如果您无法更改引荐来源网址策略,则可以禁用来源检查 使用 Rails.application.config.action_controller.forgery_protection_origin_check 设置。
为了减轻上述错误,我在此处引用了链接,该链接建议了以下解决方案,但无法使其正常工作。 link 2
在 config/application.rb 我有
Bundler.require(*Rails.groups)
module Saverecord
class Application < Rails::Application
Rails.application.config.action_controller.forgery_protection_origin_check = false
config.action_controller.allow_forgery_protection = false
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
end
end
在我的应用控制器上
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
#protect_from_forgery with: :exception
protect_from_forgery with: :null_session
end
【问题讨论】:
-
如果此应用仅用于测试目的,您可以通过将
protect_from_forgery with: :null_session更改为skip_before_action :verify_authenticity_token来禁用protect_from_forgery -
但您也可以通过添加
<%= csrf_meta_tags %>将 csrf 令牌添加到您的表单中 -
谢谢尤里。错误现在消失了。现在,当我尝试提交表单时。它说参数丢失或值为空。我也尝试实现下面的代码,但没有运气 @user1 = User1.new(user1_params) def user1_params params.require(:user1).permit(:name, :password, :password_confirmation) end
-
如果它是你的表单,贴在这里,你应该修复,看看
devisegem 中的示例,强烈建议在 Rails 中设置的用户github.com/RailsApps/rails-devise/blob/master/app/views/devise/… -
非常感谢 Yurij
标签: ruby-on-rails