无法访问从 React 客户端到 Rails api 的 POST 请求中发送的参数
Can't access params sent in POST request from React client to Rails api
我在 localhost:3000
上有一个 React 登录组件 运行ning。它 returns 一个表单,在提交时使用 JS fetch()
到 post 它的信息到 rails api 中的 SessionsController 运行s localhost:3001
。我在使用 FormData 对象和自定义 json 之间交替使用;我 运行 遇到同样的问题。我已经通过使用 'rack-cors' 消除了控制台中的 CORS 错误,但我在访问 SessionController 的 create
操作中的 posted 信息时仍然遇到问题。当我将 binding.pry 放入其中时,这就是我在参数中的全部内容:
[1] pry(#<SessionsController>)> params
=> <ActionController::Parameters {"controller"=>"sessions",
"action"=>"create"} permitted: false>
-------- 如何获得我的用户名和密码? ----------
登录组件:
import React from 'react'
const Login = () => {
return(
<div>
<h1>Login</h1>
<form id="login-form" onSubmit={(event) => postSession(event)}>
<label htmlFor="username">Username </label><br/>
<input type="text" id="username"/><br/>
<label htmlFor="password">Password </label><br/>
<input type="password" id="password"/><br/>
<input type="submit" value="Login"/>
</form>
</div>
)
}
const postSession = (event) => {
event.preventDefault()
fetch('http://localhost:3001/sessions',
{
header: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'post',
body: new FormData(document.getElementById("login-form"))
}
)
.then((response) => {console.log("Post Session Response: ", response)})
.catch((error) => {console.log("Error in the Post Session fetch: ", error)})
}
export default Login
config/application.js:
module Geohunter2
class Application < Rails::Application
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :patch, :options]
end
end
end
end
您的表单输入需要 name
个属性:
<input type="text" id="username" name="user[username]"/><br/>
...
<input type="text" id="password" name="user[password]"/><br/>
然后您就可以在您的控制器中访问 params[:user][:username] params[:user][:password]
。
假设您在较新版本的 Rails (4+) 中使用 strong_params
,您还需要在控制器操作中使用类似的内容。
def new # or whatever action you're posting
Session.create(user_params)
end
private
def user_params
params.require(:user).permit(:username, :password)
end
我在 localhost:3000
上有一个 React 登录组件 运行ning。它 returns 一个表单,在提交时使用 JS fetch()
到 post 它的信息到 rails api 中的 SessionsController 运行s localhost:3001
。我在使用 FormData 对象和自定义 json 之间交替使用;我 运行 遇到同样的问题。我已经通过使用 'rack-cors' 消除了控制台中的 CORS 错误,但我在访问 SessionController 的 create
操作中的 posted 信息时仍然遇到问题。当我将 binding.pry 放入其中时,这就是我在参数中的全部内容:
[1] pry(#<SessionsController>)> params
=> <ActionController::Parameters {"controller"=>"sessions",
"action"=>"create"} permitted: false>
-------- 如何获得我的用户名和密码? ----------
登录组件:
import React from 'react'
const Login = () => {
return(
<div>
<h1>Login</h1>
<form id="login-form" onSubmit={(event) => postSession(event)}>
<label htmlFor="username">Username </label><br/>
<input type="text" id="username"/><br/>
<label htmlFor="password">Password </label><br/>
<input type="password" id="password"/><br/>
<input type="submit" value="Login"/>
</form>
</div>
)
}
const postSession = (event) => {
event.preventDefault()
fetch('http://localhost:3001/sessions',
{
header: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'post',
body: new FormData(document.getElementById("login-form"))
}
)
.then((response) => {console.log("Post Session Response: ", response)})
.catch((error) => {console.log("Error in the Post Session fetch: ", error)})
}
export default Login
config/application.js:
module Geohunter2
class Application < Rails::Application
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :patch, :options]
end
end
end
end
您的表单输入需要 name
个属性:
<input type="text" id="username" name="user[username]"/><br/>
...
<input type="text" id="password" name="user[password]"/><br/>
然后您就可以在您的控制器中访问 params[:user][:username] params[:user][:password]
。
假设您在较新版本的 Rails (4+) 中使用 strong_params
,您还需要在控制器操作中使用类似的内容。
def new # or whatever action you're posting
Session.create(user_params)
end
private
def user_params
params.require(:user).permit(:username, :password)
end