我在Rails 5上制作了一个用ruby编写的身份验证api,并编写了一个javascript前端。通过接收电子邮件和密码,然后将cookie发送回浏览器来工作。但是,当我尝试发出请求时,控制台显示以下错误:
从原点“ http://localhost:3000/users/login”到“ http://localhost:3001”的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:“访问控制”的值响应中的-Allow-Credentials标头为”,当请求的凭证模式为“ include”时,标头必须为“ true”。 XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。
#react component - signin.js
axios(
`http://localhost:3000/users/login`, {
method: "post",
withCredentials: true,
data: {email: this.state.email, password: this.state.password}
})
.then(response => {
console.log(response)
})
.catch(error => console.log(error))
}
#rails login function
def login
#fetch user
user = User.find_by(email: params[:email].to_s.downcase)
#authenticate method
if user && user.authenticate(params[:password])
#disallow unconfirmed emails
if user.confirmed_at?
auth_token = JsonWebToken.encode({user_id: user.id})
##
cookies.signed[:jwt] = {value: auth_token, httponly: true}
render json: {auth_token: auth_token, email:user.email},
status: :ok
else
render json: {error: 'Email not verified' }, status:
:unauthorized
end
else
render json: {error: 'Invalid username / password'}, status:
:unauthorized
end
end
答案 0 :(得分:0)
我认为您应该使用机架cors。
在Rails应用程序Gemfile中添加gem'rack-cors'
gem 'rack-cors'
将以下代码添加到config / application.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'example.com'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
您可以提供原始端点,也可以使用“ *”代替全部,而不是原始的“ example.com”。