Unable to login after importing user into Firebase Authentication
我们正在将用户密码从旧数据库迁移到Firebase Auth中,这些用户的密码使用SHA512进行了哈希处理。
我们能够成功将用户导入Firebase。但是,当我们尝试通过Firebase身份验证再次使用这些用户登录时,会出现错误:
Invalid password or this user has no password
下面是代码结构,用于导入用户的命令以及我们正在使用的
密码:测试
salt:salt
在SHA512中哈希的密码salt:
1 | 6c838e934e3feefae6cfa53af11375d4954f85c6f5ed888c02cd7806a71696d1cb449f2be78e9e6ea301a95c81f28ad8766f3ae582f9beaac33c7dc2b7ba9187 |
Base-64编码的密码salt:
1 | NmM4MzhlOTM0ZTNmZWVmYWU2Y2ZhNTNhZjExMzc1ZDQ5NTRmODVjNmY1ZWQ4ODhjMDJjZDc4MDZhNzE2OTZkMWNiNDQ5ZjJiZTc4ZTllNmVhMzAxYTk1YzgxZjI4YWQ4NzY2ZjNhZTU4MmY5YmVhYWMzM2M3ZGMyYjdiYTkxODc= |
Base-64编码的salt:
1 | c2FsdA== |
User.json:
1 2 3 4 5 6 7 8 9 10 11 | { "users": [ { "localId":"123", "emailVerified": true, "email":"[email protected]", "passwordHash":"NmM4MzhlOTM0ZTNmZWVmYWU2Y2ZhNTNhZjExMzc1ZDQ5NTRmODVjNmY1ZWQ4ODhjMDJjZDc4MDZhNzE2OTZkMWNiNDQ5ZjJiZTc4ZTllNmVhMzAxYTk1YzgxZjI4YWQ4NzY2ZjNhZTU4MmY5YmVhYWMzM2M3ZGMyYjdiYTkxODc=", "salt":"c2FsdA==" } ] } |
用于导入user.json的Firebase命令:
1 | firebase --project=projectname auth:import user.json --hash-algo=SHA512 --rounds=80 |
请让我们知道我们在这里缺少什么
谢谢
您需要添加哈希键和salt分隔符。您可以在此处找到这些详细信息。
1 | Console > Project > Authentication > Password hash paremeter |
导入命令将是这样的。
1 | firebase auth:import dev-accounts.json --hash-algo=scrypt --rounds=8 --hash-key="your_hash_key" --salt-separator="your_salt_separator" --mem-cost=14 |
我使用SHA256,遇到了同样的问题,并最终使用以下Python代码解决了它。
希望这些代码对您有所帮助。
- 创建密码哈希和salt
1 2 3 4 | password_hash_base_64 = base64.standard_b64encode(hashlib.sha256("123456salt").digest()) salt_base64 = base64.standard_b64encode("salt") print password_hash_base_64 print salt_base64 |
- import_account_sha256.json
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "users": [ { "localId":"166666", "email":"[email protected]", "emailVerified": false, "passwordHash":"5NL5SaQBwE6c0L1BDjHW+BtBOXQVH8RYwY0tGGw3khk=", "createdAt":"1613525311156", "salt":"c2FsdA==", "providerUserInfo": [] } ] } |
- Firebase CLI
1 | firebase auth:import import_account_sha256.json --hash-algo=SHA256 --rounds=1 --hash-input-order=PASSWORD_FIRST |
-
例子