2017-10-05 5 views
1

J'ai travaillé à la migration d'une application existante vers l'authentification Firebase et j'ai besoin d'importer les mots de passe utilisateur dans Firebase pour éviter que tout le monde doive passer par une réinitialisation du mot de passe. J'ai configuré un utilisateur de test et l'ai importé, mais après l'importation, je constate que Firebase rejette le mot de passe de l'utilisateur.Migration des utilisateurs existants vers Firebase Auth

Je soumets ce JSON fichier:

{"users": [{"localId": "5e722b92dd784e7fa37b98f94790a87e", "email": "[email protected]", "emailVerified": true, "passwordHash": "6ZoYxCjLONXyYIU2eJIuAw==", "displayName": "Test"}]} 

J'ai essayé d'ajouter « sel »: « » à ce qui précède, mais il n'a eu aucun effet.

J'exécution avec cette commande:

firebase auth:import firebaseUsers.json --hash-algo=MD5 --rounds 0 --project projectname 

qui fonctionne avec succès et fait ajouter l'utilisateur. Mais l'utilisateur obtient simplement "Le mot de passe fourni est incorrect ou l'utilisateur n'a pas de mot de passe" lorsque j'essaie de me connecter avec eux.

La valeur "rounds" est quelque chose que j'ai pris des exemples en ligne. J'ai aussi essayé 1, 4 et 64, sans succès.

Le mot de passe de ce compte de test est abc123. J'ai confirmé que le base64 MD5 de abc123 est 6ZoYxCjLONXyYIU2eJIuAw == avec ce Python:

import hashlib 
import codecs 
import base64 
m = hashlib.md5() 
m.update("abc123".encode('utf-8')) 
print (base64.b64encode(codecs.decode(m.hexdigest(), 'hex')).decode()) 

Ce qui fait en effet la sortie 6ZoYxCjLONXyYIU2eJIuAw ==

Quelqu'un peut-il Hows passé par ce processus avant de voir ce que je l'ai fait mal ici?

Répondre

0

Le problème avec le code dans la question est qu'il a converti les chiffres hexadécimaux du MD5 en base64. Ce que vous avez réellement besoin de faire est de convertir la chaîne des chiffres hexadécimaux en base64. Donc en utilisant ce qui précède comme exemple

Le MD5 de abc123 est 'e99a18c428cb38d5f260853678922e03'. Vous devez convertir en base64 comme une chaîne, ce qui équivaut à « ZTk5YTE4YzQyOGNiMzhkNWYyNjA4NTM2Nzg5MjJlMDM = »

Voici la version corrigée du code dans la question:

m = hashlib.md5() 
m.update("abc123".encode('utf-8')) 
hexmd5 = codecs.decode(m.hexdigest(), 'hex') 
print(base64.b64encode(bytes(m.hexdigest(), 'utf-8')).decode())