使用 Ruby/Rails 进行 Base 64 URL 解码?
我正在使用 Facebook API 和 Ruby on Rails,并尝试解析返回的 JSON。我遇到的问题是 Facebook base64URL 对其数据进行编码。 Ruby 没有内置的 base64URL 解码。
有关base64编码和base64URL编码之间的区别,请参阅维基百科。
如何使用 Ruby/Rails 对其进行解码?
编辑:
因为有些人阅读有困难 - Base64 URL 与 Base64 不同
I am working with the Facebook API and Ruby on Rails and I'm trying to parse the JSON that comes back. The problem I'm running into is that Facebook base64URL encodes their data. There is no built-in base64URL decode for Ruby.
For the difference between a base64 encoded and base64URL encoded, see wikipedia.
How do I decode this using Ruby/Rails?
Edit:
Because some people have difficulty reading - base64 URL is DIFFERENT than base64
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
德米特里的回答是正确的。它考虑了字符串解码之前必须出现的“=”符号填充。我不断收到格式错误的 JSON,最后发现这是由于填充造成的。 详细了解 Facebooksigned_request 的 base64_url_decode。
这是我使用的简化方法:
Dmitry's answer is correct. It accounts for the '=' sign padding that must occur before string decode. I kept getting malformed JSON and finally discovered that it was due to the padding. Read more about base64_url_decode for Facebook signed_request.
Here's the simplified method I used:
谷歌搜索“base64 for URL ruby”并选择第一个结果,我找到了答案
当然,您可以为
base64UrlDecode( data )
创建一个助手。发生的情况是,它采用
encoded_token
并将所有-
和_
字符替换为+
和/
分别。然后,它使用unpack('m')
解码 Base64 编码的数据,并返回返回数组中的第一个元素:您的解码数据。Googling for "base64 for URL ruby" and choosing the first result lead me to the answer
You could then, of course, make a helper to
base64UrlDecode( data )
.What's happening is that it takes the
encoded_token
and replaces all the-
and_
characters with+
and/
, respectively. Then, it decodes the base64-encoded data withunpack('m')
and returns the first element in the returned array: Your decoded data.对于 base64URL 编码的字符串
s
...For base64URL-encoded string
s
...这就是我解析我的facebook应用程序的signed_request的方式
救援部分只添加一个“}”,因为facebook有时很奇怪,让它脱离了解码的哈希(也许他们已经修复了它......)。
That's the way i parse the signed_request of my facebook application
The rescue part only add a '}', becouse facebook is weird enough to let it out of de encoded hash sometimes (maybe they fixed it already...).