ruby-on-rails - Rails,请求的资源上不存在“Access-Control-Allow-Origin”标头
问题描述
我在 Angular 上有应用程序,它使用服务器 Ruby on Rails/oAuth 后端。在控制台中注册用户时,我收到这些错误。
POST*.herokuapp.com/api/users 500 (Internal Server Error) *.herokuapp.com/api/users:1
Failed to load *.herokuapp.com/api/users: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '*.herokuapp.com' is therefore not allowed access. The response had HTTP status code 500. /registration:1
{
"isTrusted": true /auth.ts:95
}
以及发生的其他错误
{"error":"invalid_grant","error_description":"The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."}
Error: Uncaught (in promise): {"error":"invalid_grant","error_description":"The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client."}
这是我的应用程序.rb
require_relative 'boot'
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module Dkeeper
class Application < Rails::Application
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
end
end
这里 user_controller.rb
class Api::UsersController < ApiController
before_action :find_user, only: [:show, :update, :destroy]
def index
@users = User.all
if @users.count(:all) > 0
render
else
render json: { message: 'No Users Found' }, status: 200
end
end
def show
render
end
def create
@user = User.new(user_params)
if @user.save
origin = request.headers['origin']
ApplicationMailer.registration_confirmation(@user, origin).deliver
render :show, status: :ok
else
render json: {
message: 'Registration failed',
errors: @user.errors.full_messages
}, status: 422
end
end
def update
if @user.update(user_params)
render :show
else
render json: {
message: 'Could not update profile',
errors: @user.errors.full_messages
}, status: 422
end
end
def destroy
if @user.destroy
render
else
render json: {
message: 'Could not delete user',
errors: @user.errors.full_messages
}, status: 422
end
end
def confirm_email
user = User.find_by_confirm_token(params[:id])
if user
user.update_attribute(:email_confirmed, true)
render json: {
message: 'Email address has already confirmed',
errors: user.errors.full_messages
}, status: 200
else
render json: {
message: 'Email confirmation failed'
}, status: 422
end
end
private
def user_params
params.require(:user).permit(:email, :first_name, :last_name, :password, :password_confirmation)
end
def find_user
@user = User.find(params[:id])
end
end
当我登录时,用户被添加到数据库中,但我在控制台中收到错误。
感谢您的任何帮助。
解决方案
这是一个 CORS 错误。您需要在服务器端启用 CORS,并在客户端通过正确的标头。也谷歌“同源政策”
推荐阅读
- asp.net-mvc - 在用于 WebAPI 和 WebApplication 的通用 c# 类库中获取客户端的 IP 地址
- c - 反向阵列 C
- google-chrome - Google Chrome 声称 TortoiseGit 和 TortoiseSVN 是不兼容的应用程序
- angular - 如何将数据传递到角度材料底页
- xamarin.forms - 构建具有多个列表视图的食谱页面
- ruby-on-rails - 如何访问 json 响应导轨中的值?
- python - 简单的张量流示例:
- pdf - Ghostscript在一页上添加一个,避免处理所有页面(出于速度原因)?
- javascript - 节点“require”语法创建模块的新引用
- javascript - 如何将 setTimeout 操作更改为 requestAnimationFrame?