Android 上载图像时已完成422个无法处理的实体RESTful API Rails

Android 上载图像时已完成422个无法处理的实体RESTful API Rails,android,ruby-on-rails,ruby,restful-architecture,Android,Ruby On Rails,Ruby,Restful Architecture,我有一个Android应用程序,可以拍照并发送到RubyonRails上构建的RESTfulAPI。当我从应用程序验证后上传图像时,发生422个无法处理的实体错误。我使用carrierwave gem处理图像。 这是我的User_controller.rb文件 class UsersController < ApplicationController skip_before_action :authorize_request, only: :create #skip_before_

我有一个Android应用程序,可以拍照并发送到RubyonRails上构建的RESTfulAPI。当我从应用程序验证后上传图像时,发生422个无法处理的实体错误。我使用carrierwave gem处理图像。 这是我的User_controller.rb文件

class UsersController < ApplicationController
  skip_before_action :authorize_request, only: :create
  #skip_before_action :verify_auth_token
  # POST /signup
  # return authenticated token upon signup
  def create
    user = User.create!(user_params)
    auth_token = AuthenticateUser.new(user.email, user.password).call
    response = { message: Message.account_created, auth_token: auth_token }
    json_response(response, :created)
  end

  def index
    json_response(@current_user)
  end

  private

  def user_params
    params.permit(
        :name,
        :email,
        :password,
        :password_confirmation,
    )
  end
end
class ImagesController < ApplicationController
  before_action :set_user
  before_action :set_user_image, only: [:show, :update, :destroy, :create]

  def index
    json_response(@current_user.images)
  end

  def show
    json_response(@image)
  end

  def create
    @current_user.images.create(image_params)
    json_response(@current_user, :user_id)
  end

  private
  def image_params
    params.permit(:photo)
  end

  def set_user
    @current_user = User.find(params[:user_id])
  end

  def set_user_image
    @image = @current_user.images.find_by!(id: params[:id]) if @current_user
  end


end
错误日志:

Started POST "/images" for 203.159.41.110 at 2017-07-03 21:44:56 +0700
Processing by ImagesController#create as HTML
  Parameters: {"photo"=>#<ActionDispatch::Http::UploadedFile:0x005615c5a900e8 @tempfile=#<Tempfile:/tmp/RackMultipart20170703-29818-3gozwl.jpg>, @original_filename="IMG_20170703_202628.jpg", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"photo\"; filename=\"IMG_20170703_202628.jpg\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n">, "auth_token"=>"token"}
Completed 422 Unprocessable Entity in 2ms (Views: 1.2ms | ActiveRecord: 0.0ms)
2017-07-03 21:44:56+0700,203.159.41.110开始发布“/images” 由ImagesController处理#创建为HTML 参数:{“photo”=>,“auth_token”=>“token”} 在2ms内完成422个无法处理的实体(视图:1.2ms |活动记录:0.0ms)
我认为您可能没有处理Authentity\u令牌,默认情况下,每个POST请求都需要它

您可以禁用它,但它会暴露api跨站点请求伪造(CSRF)攻击

类userscocontroller{request.format.json?}
结束

还可以将mobile中的请求类型更改为application/json


参考:

经过大量研究,我发现未处理auth令牌。发送Auth令牌作为头解决了问题
httppost.setHeader(“授权:”,令牌)

class Image < ApplicationRecord
  mount_uploader :photo, PhotoUploader
  belongs_to :user
end
Rails.application.routes.draw do
  resources :users do
    resources :images
  end
  post 'auth/login', to: 'authentication#authenticate'
  post 'signup', to: 'users#create'
  post 'images', to: 'images#create'
end
Started POST "/images" for 203.159.41.110 at 2017-07-03 21:44:56 +0700
Processing by ImagesController#create as HTML
  Parameters: {"photo"=>#<ActionDispatch::Http::UploadedFile:0x005615c5a900e8 @tempfile=#<Tempfile:/tmp/RackMultipart20170703-29818-3gozwl.jpg>, @original_filename="IMG_20170703_202628.jpg", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"photo\"; filename=\"IMG_20170703_202628.jpg\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n">, "auth_token"=>"token"}
Completed 422 Unprocessable Entity in 2ms (Views: 1.2ms | ActiveRecord: 0.0ms)