en base 64 URL décoder avec Ruby/Rails?
Je travaille avec le Facebook de l'API et de Ruby on Rails et je vais essayer de parser le JSON qui revient. Le problème, je suis en cours d'exécution en est que Facebook base64URL code pour leurs données. Il n'est pas intégré dans le base64URL décoder pour Ruby.
La différence entre un encodés en base64 et base64URL codé, voir wikipedia.
Comment décoder ce à l'aide de Ruby/Rails?
Modifier:
Parce que certaines personnes ont de la difficulté à lire - base64 URL est DIFFÉRENTE de celle base64
OriginalL'auteur sethvargo | 2011-01-17
Vous devez vous connecter pour publier un commentaire.
Googler "base64 pour les URL ruby" et en choisissant le premier résultat me conduire à la réponse
Vous pouvez, bien sûr, apporter une aide à
base64UrlDecode( data )
.Ce qui se passe, c'est qu'il prend la
encoded_token
et remplace toutes les-
et_
caractères avec+
et/
, respectivement. Ensuite, il décode les données encodées en base64 avecunpack('m')
et renvoie le premier élément dans le tableau renvoyé: Vos données décodées.Je pensais que tu voulais décoder les données que Facebook est à vous envoyer... ? Dans l'exemple ci-dessus,
encoded_token
est ce que Facebook est à envoyer à vous etcipher_token
est le résultat décodé.Vous pouvez obtenir un mal formé JSON erreur avec cette solution en raison de la façon dont le rembourrage est manipulé. Voir qugstart.com/blog/ruby-and-rails/... pour la solution.
OriginalL'auteur davemyron
Dmitry réponse est bonne. Il représente le " = " signe de rembourrage qui doivent se produire avant que la chaîne de décoder. J'ai continué à obtenir malformé JSON et a finalement découvert qu'elle était due à la marge. Lire plus à propos de base64_url_decode pour Facebook signed_request.
Voici la simplification de la méthode que j'ai utilisé:
Remarque: Rembourrage avec quatre '=' semble se briser si vous utilisez strict_decode64 ou urlsafe_decode64, mais elle est tolérée par decode64.
OriginalL'auteur awaage
Pour base64URL-chaîne codée
s
...Il translittère
+
à-
et/
à_
, ce qui devrait générer plaine base64, et ensuite, il utilise le haut-base64 unpacker, qui revient, je pense, un élément de tableau, afin de nous saisir de la chaîne résultat avec[0]
. Vous pouvez remplacer[0]
avec.first
Il ressemble, vous pouvez aussi aller dans l'autre sens et de convertir une chaîne base64 pour base64URL avec
s.tr('-_', '+/')
OriginalL'auteur DigitalRoss
Que la façon dont je parse le signed_request de mon facebook application
Le sauvetage d'une partie seulement d'ajouter un '}', parce que facebook est assez étrange de le laisser sortir de de codé de hachage parfois (peut-être qu'il fixe déjà...).
OriginalL'auteur Dimas Cyriaco
OriginalL'auteur Dmitriy Nesteryuk