簡體   English   中英

無法訪問從React客戶端發送到POST請求中的params到Rails api

[英]Can't access params sent in POST request from React client to Rails api

我有一個在localhost:3000上運行的React Login組件。 它返回一個表單,在提交時,使用JS fetch()將其信息發布到在localhost:3001上運行的rails api中的SessionsController。 我在使用FormData對象和自定義json之間進行了交替; 我遇到了同樣的問題。 我已經通過使用'rack-cors'擺脫了控制台中的CORS錯誤,但是我仍然無法在SessionController的create操作中訪問發布的信息。 當我將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

配置/ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM