0

Ruby On Rails で開発された API を次のように変更する必要があります。

class V0::PythonsController < ApplicationController
  skip_before_action :authorize_request

  # POST v0/python/import
  def import
    result = { status: :error }
    data = eval(AwsTool.decrypt(params["code"])).first
    if data.class == Hash
      user = User.find_by(id: data[:ot_user_id])
      activity_type = ActivityType.find_by(id: data[:activity_type])
      if user.nil?
        result[:msg] = "user not found"
      elsif activity_type.nil?
        result[:msg] = "activity type not found"
      else...

「コード」パラメーターでいくつかのデータを渡し、それを復号化してから調べます。if 句を追加して、別のオリジンから API を呼び出したときに暗号化と復号化が行われないようにします。だから私はこの変更を加えました:

class V0::PythonsController < ApplicationController
  skip_before_action :authorize_request

  # POST v0/python/import
  def import
    result = { status: :error }
  if params["origin"] != 'trusted'
    data = eval(AwsTool.decrypt(params["code"])).first
  else
    data = params["code"]
  end
  if data.class == Hash
    user = User.find_by(id: data[:ot_user_id])
    activity_type = ActivityType.find_by(id: data[:activity_type])
    ...

問題は、data.class がハッシュ オブジェクトではなく、文字列であることです。t_hash や他の同様の関数のように、オブジェクトを String から Hash に変換するさまざまなソリューションを試しましたが、うまくいきませんでした。パラメータが許可されていないというエラーが発生しました。許可を追加しようとしましたが、まだ失敗しています。

他のアイデアはありますか?

4

1 に答える 1