В документации Firebase, Проверка идентификаторов , объясняется, как Проверка идентификаторов с помощью Firebase Admin SDK .
Но сначала Firebase Admin SDK должен быть настроен . После установки Go Admin SDK с go get firebase.google.com/go
его необходимо инициализировать (I предположим , этот код помещен в функцию HTTP-сервера main
):
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
Вопрос № 1: У меня нет context
в моем приложении App Engine, потому что в Миграция из App Engine Go SDK он сообщает:
Использование request.Context () или ваш предпочтительный контекст вместо использования appengine.NewContext .
AFACT request.Context () доступно из функции обработчика HTTP. См. HandleFun c пример на golang .org . Использование запроса контекста потребует инициализации Firebase SDK для каждого HTTP-запроса!
Вопрос № 2 : Как я могу получить ссылку на мой Firebase app
из обработчика HTTP?
func main() {
// ------> Initialize the Firebase Go SDK. <------ \\
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
// My usual boilerplate for App Engine.
http.HandleFunc("/api/foo", fooHandler)
http.HandleFunc("/api/bar", barHandler)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s", port)
}
log.Printf("Listening on port %s", port)
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatal(err)
}
}
В репозитории firebase / firebase-admin- go есть несколько очень полезных функций, но без context
(для HTTP-запроса?) И нет возможности поделиться app
с моими обработчиками HTTP, я не могу понять, как их использовать:
// ==================================================================
// https://firebase.google.com/docs/auth/admin/verify-id-tokens
// ==================================================================
func verifyIDToken(ctx context.Context, app *firebase.App, idToken string) *auth.Token {
// [START verify_id_token_golang]
client, err := app.Auth(ctx)
if err != nil {
log.Fatalf("error getting Auth client: %v\n", err)
}
token, err := client.VerifyIDToken(ctx, idToken)
if err != nil {
log.Fatalf("error verifying ID token: %v\n", err)
}
log.Printf("Verified ID token: %v\n", token)
// [END verify_id_token_golang]
return token
}