gpt4 book ai didi

api - 如何检查成百上千个 API 端点的身份验证?

转载 作者:IT王子 更新时间:2023-10-29 00:40:06 25 4
gpt4 key购买 nike

我目前正在使用 golang(使用 Gorilla)构建一个 Web 应用程序,并且已经实现了一些 API 端点。但是,我注意到每次我实现像

这样的功能时
func CreateUserHandler(w http.ResponseWriter, r *http.Request) {}

我必须将下面的函数添加到处理程序函数体中以检查请求是否被授权:

func checkAuthorizedUser (r * http.Request) error {
uid, err := CheckRequestUser (r.Cookie("uid"))
if err != nil {
return errors.New("Can't find cookie value for uid")
}
if !IsValidUser (uid.Value) {
return errors.New("Not a valid user")
}
return nil
}

现在发生在我身上的是,我必须将 checkAuthorizedUser() 添加到每个处理程序函数,到目前为止我已经有很多处理程序函数。我想知道除了在每个处理程序函数中显式检查身份验证之外,是否有更好的方法来检查客户端是否有权访问特定端点。

最佳答案

Gorilla 有一个路由器供您使用。然后,您可以使用身份验证检查包装路由器。这样的事情会起作用:

func checkPermissions(h http.Handler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
authCheck := true //implement the actual checking

if authCheck {
w.WriteError(w, 400, "error")
return
}

h.ServeHttp(w, r)
}
}

func main() {
r := mux.NewRouter()
r.HandleFunc("/", HomeHandler)
r.HandleFunc("/products", ProductsHandler)
r.HandleFunc("/articles", ArticlesHandler)
http.Handle("/", checkPermissions(r))
}

支持链接:

https://godoc.org/github.com/gorilla/mux#NewRouter

https://github.com/gorilla/mux

关于api - 如何检查成百上千个 API 端点的身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44011446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com