Cors rails - 参数不在POST方法中发送

时间:2018-01-20 12:52:00

标签: ruby-on-rails reactjs cors fetch

在Rails API中,我在login中有一个UsersController POST方法,它接受2个参数(邮件和密码),如果找到记录则检查数据库,如果是,则返回它。 / p>

  def login(mail, password)
    user = User.where(mail: mail, password: password)
    render json: user
  end

在我的正面,在React中,我用fetch调用此方法,它以一种形式获取邮件和密码值:

  login = () => {
    if(this.state.mail != null && this.state.password != null){
        fetch('http://127.0.0.1:3001/api/login', {
            method: 'post',
            credentials: 'include',
            body: JSON.stringify({
                            mail: this.state.mail,
                            password: this.state.password
                        }),
            headers: {
                'Accept': 'application/json',
                'Content-type': 'application/json'
            }
        })
        .then((res) => {
            console.log(res)
            if(res.data.length === 1 ){
                const cookies = new Cookies();
                cookies.set('mercato-cookie',res.data[0].id,{path: '/'});
                this.setState({redirect: true})
            }
        })
    }
  }

该方法调用良好,但我有以下错误:ArgumentError (wrong number of arguments (given 0, expected 2)),我用Postman尝试了相同的结果,所以我猜问题是Rails问题。 这是我的角色配置:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'localhost:3000'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head],
      credentials: :true
  end
end

我认为credentials: :true可以解决问题,但事实并非如此。 我在这里没有想法:/

1 个答案:

答案 0 :(得分:1)

滑轨'动作不以这种方式处理参数。您必须使用params

def login(mail, password)
  user = User.where(mail: mail, password: password)
  render json: user
end

def login
  mail, password = params.values_at(:mail, :password)
  user = User.where(mail: mail, password: password)
  render json: user
end