
本文介绍如何在 go 应用中集成 firebase admin sdk,安全、可靠地创建、更新 firebase 身份验证用户,支持自定义 uid、邮箱、密码、手机号等字段,无需前端交互。
本文介绍如何在 go 应用中集成 firebase admin sdk,安全、可靠地创建、更新 firebase 身份验证用户,支持自定义 uid、邮箱、密码、手机号等字段,无需前端交互。
Firebase 官方现已正式支持 Go 语言,通过 Firebase Admin SDK for Go(firebase.google.com/go),开发者可在服务端直接调用 Firebase Authentication 的管理接口,实现用户全生命周期操作。与前端 createUserWithEmailAndPassword() 不同,Admin SDK 运行于可信服务端环境,具备更高权限(如跳过密码强度校验、强制设置 UID、禁用账户等),且不依赖客户端凭证。
✅ 前置准备
启用 Firebase Admin SDK:在 Firebase Console 中为项目生成服务账号密钥(JSON 文件);
-
安装依赖:
go get firebase.google.com/go go get cloud.google.com/go/firestore
-
初始化客户端(推荐使用环境变量加载凭据):
import ( "context" "log" "os" "firebase.google.com/go" "firebase.google.com/go/auth" ) func initAuthClient() (*auth.Client, error) { ctx := context.Background() // 方式一:通过环境变量 GOOGLE_APPLICATION_CREDENTIALS 指定 JSON 密钥路径 opt := option.WithCredentialsFile("path/to/serviceAccountKey.json") config := &firebase.Config{ProjectID: "your-project-id"} fbApp, err := firebase.NewApp(ctx, config, opt) if err != nil { return nil, err } return fbApp.Auth(ctx) }
? 创建用户(支持自定义 UID)
使用 auth.UserToCreate 构建用户参数,可灵活指定全部字段(部分字段如 Email 和 Password 为必填):
client, _ := initAuthClient()
params := (&auth.UserToCreate{}).
Email("user@example.com").
Password("SecurePass123!").
DisplayName("Alice Johnson").
PhotoURL("https://example.com/avatar.png").
EmailVerified(false).
Disabled(false)
user, err := client.CreateUser(context.Background(), params)
if err != nil {
log.Fatalf("创建用户失败: %v", err)
}
log.Printf("用户创建成功,UID: %s, 邮箱: %s", user.UID, user.Email)
⚠️ 注意:
Password必须满足 Firebase 密码策略(至少 6 字符),否则返回INVALID_PASSWORD错误;EMAIL_EXISTS。
若需指定自定义 UID(例如与公司内部 ID 对齐),只需显式调用 .UID("custom-uid-123"):
params := (&auth.UserToCreate{}).
UID("usr_abc789").
Email("user@example.com").
Password("SecurePass123!")
user, err := client.CreateUser(context.Background(), params)
// 成功后该 UID 将永久绑定,不可修改
? 更新用户信息
使用 auth.UserToUpdate 可部分更新已存在用户(传入 UID 即可):
updateParams := (&auth.UserToUpdate{}).
Email("newemail@example.com").
DisplayName("Alice J.").
Disabled(true) // 禁用账户
updatedUser, err := client.UpdateUser(context.Background(), "usr_abc789", updateParams)
if err != nil {
log.Fatalf("更新用户失败: %v", err)
}
log.Printf("用户已更新: %+v", updatedUser)
支持字段包括:Email, EmailVerified, PhoneNumber, DisplayName, PhotoURL, Disabled, Password(重置密码)等;但 UID、创建时间等只读字段不可更新。
? 重要注意事项
- ❗ Admin SDK 不可用于客户端(如浏览器或移动端),仅限服务端可信环境使用,避免密钥泄露;
- ? 用户创建后,不会自动触发邮箱验证邮件或短信验证码,需手动调用
SendEmailVerification()或SendPasswordResetEmail(); - ? 若需密码重置链接,应使用
client.SendPasswordResetEmail(ctx, email),而非暴露密码字段; - ?
firego是第三方非官方库,已不推荐使用;请务必迁移到官方firebase.google.com/goSDK 以获得完整功能与长期维护支持。
通过以上方式,你可以在 Go 后端无缝集成 Firebase 用户管理能力,构建高安全性、可扩展的身份认证体系。










