在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
可以解决问题,但事实并非如此。
我在这里没有想法:/
答案 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