为了账号安全,请及时绑定邮箱和手机立即绑定

将外部用户导入 firebase

将外部用户导入 firebase

Go
慕运维8079593 2022-11-08 10:41:19
我想将用户从外部数据库导入到 firebase。密码使用一个函数进行哈希处理sha256,密码前面有一个盐(这是一个 UUID)。例如:password = "123qwerty!"salt = "cb60eb29-95a2-418e-be2a-c1c107fb1add"hash = sha256(salt+password)# 54ccb21d42c6961aa1b666b7cb0485f85aab2f2323399fb2959ea5e4e9f6f595现在要将其导入firebase,我将执行以下操作:users = []*auth.UserToImportusers = append(users, (&auth.UserToImport{}).    UID("some-uid").    Email("jon.foo@example.com").    PasswordHash([]byte("54ccb21d42c6961aa1b666b7cb0485f85aab2f2323399fb2959ea5e4e9f6f595")).    PasswordSalt([]byte("cb60eb29-95a2-418e-be2a-c1c107fb1add")).    DisplayName("Jon FOO"))h := hash.SHA256{    Rounds:     1,    InputOrder: hash.InputOrderSaltFirst,}res, err := cl.ImportUsers(ctx, users, auth.WithHash(h))if err != nil {    log.Fatal(err)}用户在firebase中很好地导入(我可以在控制台中看到它),但是当我尝试登录时,我有这个错误The password is invalid or the user does not have a password.我看不出我的方式有什么问题,也许Rounds应该更新参数,但是到什么值?
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

我终于找到了我的问题。在我的情况下,我给出PasswordHash了密码的十六进制表示:


PasswordHash([]byte("54ccb21d42c6961aa1b666b7cb0485f85aab2f2323399fb2959ea5e4e9f6f595")).

事实证明,我必须先解码密码,如下所示:


decoded, err := hex.DecodeString("54ccb21d42c6961aa1b666b7cb0485f85aab2f2323399fb2959ea5e4e9f6f595")

if err != nil {

    return err

}

user := (&auth.UserToImport{}).

    PasswordHash(decoded).

    PasswordSalt([]byte("cb60eb29-95a2-418e-be2a-c1c107fb1add")). // the salt stays the same

    ...


// call ImportUsers with the same hash configuration (Rounds: 1, InputOrder: SaltFirst)

更新后,我运行了代码,现在可以使用我的导入用户进行身份验证。


快速说明:正如评论中提到的,node SDK 没有指定输入顺序的选项(首先是盐或密码),这似乎是一个重要的缺失功能。


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信