在使用Firestore Go SDK时,认证用户通常涉及到Firebase Authentication服务。Firebase Authentication可以帮助你管理用户的身份验证,并生成一个ID令牌(ID Token),你可以使用这个令牌来认证用户并访问Firestore。
以下是一个示例,展示了如何在Go中使用Firebase Authentication和Firestore SDK来认证用户。
首先,你需要安装Firebase Admin SDK for Go。你可以使用以下命令来安装:
go get firebase.google.com/go
在你的Go项目中,初始化Firebase Admin SDK。你需要提供服务账号密钥文件的路径。
package main
import (
"context"
"log"
"os"
firebase "firebase.google.com/go"
"google.golang.org/api/option"
)
func main() {
// 使用服务账号密钥文件初始化Firebase Admin SDK
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
// 获取Auth客户端
authClient, err := app.Auth(context.Background())
if err != nil {
log.Fatalf("error getting Auth client: %v\n", err)
}
// 获取Firestore客户端
firestoreClient, err := app.Firestore(context.Background())
if err != nil {
log.Fatalf("error getting Firestore client: %v\n", err)
}
defer firestoreClient.Close()
// 你的代码逻辑
}
假设你已经在客户端(如iOS、Android或Web)中获取了用户的ID令牌。你可以使用Firebase Admin SDK来验证这个ID令牌。
func verifyIDToken(authClient *auth.Client, idToken string) (*auth.Token, error) {
// 验证ID令牌
token, err := authClient.VerifyIDToken(context.Background(), idToken)
if err != nil {
return nil, err
}
return token, nil
}
一旦你验证了ID令牌,你可以使用认证用户的信息来访问Firestore。
func main() {
// 使用服务账号密钥文件初始化Firebase Admin SDK
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
// 获取Auth客户端
authClient, err := app.Auth(context.Background())
if err != nil {
log.Fatalf("error getting Auth client: %v\n", err)
}
// 获取Firestore客户端
firestoreClient, err := app.Firestore(context.Background())
if err != nil {
log.Fatalf("error getting Firestore client: %v\n", err)
}
defer firestoreClient.Close()
// 假设你从客户端获取了ID令牌
idToken := "your_id_token_here"
// 验证ID令牌
token, err := verifyIDToken(authClient, idToken)
if err != nil {
log.Fatalf("error verifying ID token: %v\n", err)
}
// 使用认证用户的信息访问Firestore
uid := token.UID
log.Printf("Authenticated user ID: %s\n", uid)
// 示例:向Firestore添加数据
_, _, err = firestoreClient.Collection("users").Add(context.Background(), map[string]interface{}{
"uid": uid,
"name": "John Doe",
})
if err != nil {
log.Fatalf("error adding document: %v\n", err)
}
log.Println("Document added successfully")
}
领取专属 10元无门槛券
手把手带您无忧上云