Как проверить токен Firebase ID на App Engine в Go - PullRequest
1 голос
/ 26 января 2020

В документации 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...