尝试提取 API 请求令牌并包装我的处理程序
Trying to extract a API request token and wrap my handlers
我想使用新的上下文来包装我的处理程序,这样我就可以在我的所有处理程序中使用一个用户结构(或者当前请求需要的任何其他内容来告诉我谁在发出请求)。
我收到一个错误:
func main() {
router := mux.NewRouter()
router.HandleFunc("/api/v1/user/{id}", userService.GetUsers).Methods("GET")
log.Fatal(http.ListenAndServe(":3001", router))
}
func WithAuth(us UserService, next http.Handler) http.Handler {
return http.HandleFunc(func(w http.ResponseWriter, r *http.Request) {
auth := r.Header.Get("Authorization")
if auth == "" {
next.ServeHTTP(w, r) // continue without token
return
}
// token, err := a.Authorize(auth)
// if err != nil {
// http.Error(w, err.Error(), http.StatusUnauthorized)
// return
// }
ctx := context.WithValue(r.Context(), "hello", "world")
next.ServeHTTP(w, r.WithContext(ctx))
})
}
错误是:
not enough arguments in call to http.HandleFunc have
(func(http.ResponseWriter, *http.Request)) want (string,
func(http.ResponseWriter, *http.Request)) ./main.go:65:25:
http.HandleFunc(func literal) used as value ./main.go:78:12:
undefined: context
我试着改编我从这里读到的代码:https://gist.github.com/peterbourgon/2d190ddbb8d2cbddb5bceaca80eef20e#file-ctx-go
您正在混合 http.HandleFunc 和 http.HandlerFunc(注意 r)
func WithAuth(us UserService, next http.Handler) http.Handler {
return http.HandleFunc(func(w http.ResponseWriter, r *http.Request) {
但您需要 return http.HandlerFunc 来代替
func WithAuth(us UserService, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
我想使用新的上下文来包装我的处理程序,这样我就可以在我的所有处理程序中使用一个用户结构(或者当前请求需要的任何其他内容来告诉我谁在发出请求)。
我收到一个错误:
func main() {
router := mux.NewRouter()
router.HandleFunc("/api/v1/user/{id}", userService.GetUsers).Methods("GET")
log.Fatal(http.ListenAndServe(":3001", router))
}
func WithAuth(us UserService, next http.Handler) http.Handler {
return http.HandleFunc(func(w http.ResponseWriter, r *http.Request) {
auth := r.Header.Get("Authorization")
if auth == "" {
next.ServeHTTP(w, r) // continue without token
return
}
// token, err := a.Authorize(auth)
// if err != nil {
// http.Error(w, err.Error(), http.StatusUnauthorized)
// return
// }
ctx := context.WithValue(r.Context(), "hello", "world")
next.ServeHTTP(w, r.WithContext(ctx))
})
}
错误是:
not enough arguments in call to http.HandleFunc have (func(http.ResponseWriter, *http.Request)) want (string, func(http.ResponseWriter, *http.Request)) ./main.go:65:25: http.HandleFunc(func literal) used as value ./main.go:78:12: undefined: context
我试着改编我从这里读到的代码:https://gist.github.com/peterbourgon/2d190ddbb8d2cbddb5bceaca80eef20e#file-ctx-go
您正在混合 http.HandleFunc 和 http.HandlerFunc(注意 r)
func WithAuth(us UserService, next http.Handler) http.Handler {
return http.HandleFunc(func(w http.ResponseWriter, r *http.Request) {
但您需要 return http.HandlerFunc 来代替
func WithAuth(us UserService, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {