【发布时间】:2018-06-18 07:02:27
【问题描述】:
在main 中,应用程序是这样启动的:
// ...
func main () {
initializeAppDefault()
go lib.GetData()
http.HandleFunc("/_ah/somepoint", lib.SomeHandler)
// ..
func initializeAppDefault() *firebase.App {
// [START initialize_app_default]
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
// [END initialize_app_default]
return app
}
在SomeHandler 中,我需要initializeAppDefault 返回的应用程序来验证JSON Web Token(JWT)。
func SomeHandler(w http.ResponseWriter, r *http.Request) {
// Set content type:
w.Header().Set("Content-Type", "application/json")
if r.Header != nil {
ReqToken := r.Header.Get("Authorization")
splitToken := strings.Split(ReqToken, "Bearer")
ReqToken = splitToken[1]
fmt.Println(ReqToken)
// Verify JWT
// If it's invalid, return?
verifyIDToken(app, ReqToken)
// How do I pass the app in here?
func verifyIDToken(app *firebase.App, idToken string) *auth.Token {
// ...
我的问题是,当通过调用initializeAppDefault() 在main.go 文件中初始化应用程序时,如何将其传递给处理/_ah/somepoint 处的请求的SomeHandler?
【问题讨论】:
-
我不确定您所说的“传递应用程序”是什么意思。 “App”通常是指编译后的程序,以及任何支持文件。这不是可以“传递”的东西。
-
好吧,很公平;但是我的问题仍然存在,那么我将如何在处理程序中引用它呢?我是 Go 新手。对不起,如果这是一个愚蠢的问题。
-
将参数传递给处理程序的正常方法是让它返回一个闭包给实际的处理程序。
-
函数
verifyIDToken将app *firebase.App作为两个输入之一,另一个是idToken 本身。我应该从SomeHandler向这个函数传递什么来验证令牌(在ReqToken中)? -
在我调用
verifyIDToken的行中,我需要以某种方式传递“应用程序”。我在问我如何从上下文中得到它来传递它?
标签: firebase google-app-engine go firebase-authentication jwt