Преобразование параметров функции в объект Hash в Ruby on Rails - PullRequest
0 голосов
/ 28 февраля 2019

Я должен внести изменения в API, разработанный в Ruby On Rails, который выглядит следующим образом:

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...

Я передаю ему некоторые данные в параметре «code», который затем дешифруется, а затемисследовал.Я хочу добавить условие 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 не является объектом Hash, а является строкой.Я пробовал разные решения для преобразования объекта из String в Hash, такие как t_hash и другие подобные функции, но они не работали.У меня есть некоторые ошибки, связанные с тем, что параметры не разрешены, я пытался добавить к ним разрешение, но все равно не получилось.

Есть еще идеи?

1 Ответ

0 голосов
/ 28 февраля 2019

Сбой, потому что вы забыли набрать eval в коде.Сделайте это:

data = eval(params["code"])

Кстати, оценка ввода очень опасна.Я надеюсь, что вы доверяете тому, кто использует этот API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...