在 Rails 上的 Ruby 中将函数参数转换为 Hash 对象
Convert function params to Hash object in Ruby on Rails
我必须对 Ruby 上 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...
我在 "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 不是哈希对象,它是字符串。我尝试了不同的解决方案来将对象从 String 转换为 Hash,例如 t_hash 和其他类似函数,但它们没有用。我收到一些关于参数不被允许的错误,我尝试向它们添加许可但仍然失败。
还有其他想法吗?
失败是因为您忘记在代码上调用 eval
。这样做:
data = eval(params["code"])
顺便说一下,评估输入是非常危险的。我希望你相信使用这个 API.
的人
我必须对 Ruby 上 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...
我在 "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 不是哈希对象,它是字符串。我尝试了不同的解决方案来将对象从 String 转换为 Hash,例如 t_hash 和其他类似函数,但它们没有用。我收到一些关于参数不被允许的错误,我尝试向它们添加许可但仍然失败。
还有其他想法吗?
失败是因为您忘记在代码上调用 eval
。这样做:
data = eval(params["code"])
顺便说一下,评估输入是非常危险的。我希望你相信使用这个 API.
的人