我最近想开始在我的网站上实现API,但是我遇到了一些关于验证的问题,因为我不知道如何用Rails正确地发送JSON数据。我过去曾使用过一些API和JSON,但这是我第一次同时使用这两个API和JSON,而且我在RoR方面的经验仍然缺乏。
我的第一反应是将参数连接到url上,在看到API中一个更积极(尽管还不完整)的JSON响应之后,我认为我走在正确的轨道上,但在没有得到成功的响应之后,我开始深入研究我所发送的内容,这时我注意到了两个问题。
第一个问题是,URL中有一些敏感信息,比如我的clientID,关于购买的信息,比如价格和描述,使用MD5加密的秘密密钥和一些加密盐,但是根据文档,它是安全的,只是为了与服务器接收的信息进行比较,所以总的来说,我并不太担心会泄露这类信息。尽管如此,我还是想改进我的代码,并尽可能保护更多的信息。
我的第二个问题更重要,我注意到由于url参数中的空间有限,所发送的信息不完整。
就在那时,我知道我做错了什么,所以我开始寻找替代方案,最好是在帖子上回复,但是我仍然不知道如何正确地发送参数,而当我尝试使用表单时,信息仍然存在,更糟糕的是,我发送的参数在另一端似乎是空的,与我以前的尝试不同,所以我开始更深入地挖掘它。
然后,我发现link_to助手可以发送参数,但是经过一些测试之后,我发现要用rails将参数发送到外部站点,建议的方法是将参数连接到url中,所以我返回了一个完整的循环。
因此,我的问题是,您如何在rails中不使用表单(因为以前的所有信息都是在以前的表单中填写)的情况下,将参数发送到外部网站(最好是尽可能安全地保存所有信息)?
虽然我以前使用过API和JSON,但它们仍然是我不太习惯使用的主题,在某种程度上,我仍然在RoR中学到了很多东西。
这是给我带来最大结果的代码(真正的代码看起来有点不同):
我的控制器order_controller.rb
def confirm_order
#Here I group all the parameters I'll need
@payment_params = []
description = "create_"+ @order.name.gsub(' ','_')
device_info = "WEB"
currency = @order.currency
fee = @order.price
#this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
@payment_params << description << device_info << currency << fee
end在我看来,confirm_order.html.erb就像
<a href= <%="https://payexample/something/order?"+ @payment_params%> >Confirm order</a>任何见解都是受欢迎的,但现在我真的不知道如何处理这个问题,因为我已经用尽了我所学到的一切。
发布于 2019-02-21 06:01:37
我有点不明白你的UI是什么样子,但我会把所有这些信息从链接中删除,并确保在一篇文章中进行确认(因为一些浏览器预先加载链接,如果您将其作为链接保存,可能会导致意外购买)。相反,我会使用button_to助手。
我不知道您是如何跟踪订单的,无论是在数据库中还是会话中。因此,您可能需要稍微修改一下,才能通过正确的参数。
<%= button_to('Confirm order', action: 'confirm_order') %>然后,在您的confirm_order操作,您可以重定向到支付网站,而不是把所有的机密信息在页面上的所有时间。如果有人在监视网络流量,他们会很快地在标题中看到它,但是它不太容易被发现,并且在页面上有一个链接,您可以在一个新的选项卡中多次打开它。
def confirm_order
#Here I group all the parameters I'll need
@payment_params = []
description = "create_"+ @order.name.gsub(' ','_')
device_info = "WEB"
currency = @order.currency
fee = @order.price
#this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
@payment_params << description << device_info << currency << fee
redirect_to("https://payexample/something/order?#{@payment_params}")
end我不太清楚你想要那个重定向的网址是什么。这取决于外部站点。如果需要使用querystring参数,则可以对键和值进行散列,并使用to_query方法将其转换为查询字符串。
https://stackoverflow.com/questions/54799310
复制相似问题