将用户导入 Firebase 时密码错误(password_hash 使用 SHA256)
Wrong password when importing user into Firebase (password_hash using SHA256)
我们正在使用 SHA256 散列密码将用户从外部数据库迁移到 Firebase Auth。
我们目前正在尝试 from firebase_admin import auth
导入用户。我们能够导入示例用户,但无法使用该用户登录(密码错误)。
以下是重现问题的最少代码片段。
- 我们以一个用户为例
- 我们使用 sha256 来散列密码
- 运行
import_users_to_firebase()
- 尝试使用示例用户登录 -> 密码无效
`
def hash_password(raw_password):
import base64
import hashlib
algo = hashlib.sha256()
algo.update(raw_password)
return base64.b64encode(algo.digest())
def create_mock_user_data():
email = 'test@example.com'
password = 'test@example.com'
password_hash = hash_password(password)
print 'password_hash: {}'.format(password_hash)
return email, password_hash
def import_users_to_firebase():
mock_email, mock_password_hash = create_mock_user_data()
users = [
auth.ImportUserRecord(
uid='someuid',
display_name='Test example',
email=mock_email,
email_verified=False,
password_hash=b'{}'.format(mock_password_hash),
),
# users list can contain up to 1000 records
]
hash_alg = auth.UserImportHash.sha256(rounds=0)
result = auth.import_users(users, hash_alg=hash_alg)
print('Successfully imported {0} users. Failed to import {1} users.'.format(
result.success_count, result.failure_count))
for err in result.errors:
print('Failed to import {0} due to {1}'.format(
users[err.index].uid, err.reason))
`
我是不是遗漏了什么或者误解了什么?
有什么方法可以检查 password_hash 是否正确导入?或者有没有一种方法可以配置 Firebase 使用的哈希算法,以便导入的密码与示例用户登录相匹配?
非常感谢 Firebase 支持团队,我的问题得到了解决:)
诀窍是不要在 hash_password() 中进行 base64 编码或之后对其进行解码,因此它是原始字节序列。即
auth.ImportUserRecord(
uid='someuid',
display_name='Test example',
email=mock_email,
email_verified=False,
password_hash=mock_password_hash, # <-- mock_password_hash is not base64 encoded
)
我们正在使用 SHA256 散列密码将用户从外部数据库迁移到 Firebase Auth。
我们目前正在尝试 from firebase_admin import auth
导入用户。我们能够导入示例用户,但无法使用该用户登录(密码错误)。
以下是重现问题的最少代码片段。
- 我们以一个用户为例
- 我们使用 sha256 来散列密码
- 运行
import_users_to_firebase()
- 尝试使用示例用户登录 -> 密码无效
`
def hash_password(raw_password):
import base64
import hashlib
algo = hashlib.sha256()
algo.update(raw_password)
return base64.b64encode(algo.digest())
def create_mock_user_data():
email = 'test@example.com'
password = 'test@example.com'
password_hash = hash_password(password)
print 'password_hash: {}'.format(password_hash)
return email, password_hash
def import_users_to_firebase():
mock_email, mock_password_hash = create_mock_user_data()
users = [
auth.ImportUserRecord(
uid='someuid',
display_name='Test example',
email=mock_email,
email_verified=False,
password_hash=b'{}'.format(mock_password_hash),
),
# users list can contain up to 1000 records
]
hash_alg = auth.UserImportHash.sha256(rounds=0)
result = auth.import_users(users, hash_alg=hash_alg)
print('Successfully imported {0} users. Failed to import {1} users.'.format(
result.success_count, result.failure_count))
for err in result.errors:
print('Failed to import {0} due to {1}'.format(
users[err.index].uid, err.reason))
`
我是不是遗漏了什么或者误解了什么?
有什么方法可以检查 password_hash 是否正确导入?或者有没有一种方法可以配置 Firebase 使用的哈希算法,以便导入的密码与示例用户登录相匹配?
非常感谢 Firebase 支持团队,我的问题得到了解决:) 诀窍是不要在 hash_password() 中进行 base64 编码或之后对其进行解码,因此它是原始字节序列。即
auth.ImportUserRecord(
uid='someuid',
display_name='Test example',
email=mock_email,
email_verified=False,
password_hash=mock_password_hash, # <-- mock_password_hash is not base64 encoded
)