1 回答

TA貢獻1828條經驗 獲得超13個贊
處理此類身份驗證標頭的常用方法是使用中間件來處理身份驗證,并將身份驗證信息添加到當前上下文中。
目前,您正在創建一個新的上下文。我建議使用現有的 HTTP 上下文并添加到其中,這樣您就可以鏈接:
ctx := context.WithValue(r.Context(), sources.CtxSourcesKey, ds)
newReq:=r.WithContext(ctx)
gql.ContextHandler(ctx, w, newReq)
您可以安裝一個執行相同操作的中間件:
type autoInfoKeyType int
const authInfoKey authInfoKeyType=iota
func GetAuthInfo(ctx context.Context) *AuthInfo {
if v:=ctx.Value(authInfoKey); v!=nil {
return v.(*AuthInfo)
}
return nil
}
func AuthMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
authInfo:=processJWT(...)
if authInfo!=nil {
ctx := context.WithValue(r.Context(), authInfoKey, authInfo)
r=r.WithContext(ctx)
}
next.ServeHTTP(w,r)
}
}
這樣,您可以檢查上下文是否具有身份驗證信息,如果有,請使用它。
if authInfo:=GetAuthInfo(req.Context()); authInfo!=nil {
...
}
- 1 回答
- 0 關注
- 188 瀏覽
添加回答
舉報