gin框架39--重构 BasicAuth 中间件
warning:
这篇文章距离上次修改已过193天,其中的内容可能已经有所变动。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
// BasicAuthFunc 是一个类型,代表一个基本认证的函数
type BasicAuthFunc func(username, password string) bool
// BasicAuth 是一个中间件,用于实现基本认证
func BasicAuth(auth BasicAuthFunc) gin.HandlerFunc {
return func(c *gin.Context) {
// 获取认证信息
username, password, hasAuth := c.Request.BasicAuth()
// 如果没有认证信息,返回 401 Unauthorized
if !hasAuth {
c.AbortWithStatus(http.StatusUnauthorized)
return
}
// 调用提供的 auth 函数进行认证
if !auth(username, password) {
// 认证失败,返回 401 Unauthorized
c.AbortWithStatus(http.StatusUnauthorized)
return
}
// 认证成功,继续处理请求
c.Next()
}
}
func main() {
router := gin.Default()
// 示例认证函数
auth := func(user, pass string) bool {
return user == "user" && pass == "pass"
}
// 使用 BasicAuth 中间件
router.GET("/", BasicAuth(auth), func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "success!"})
})
router.Run(":8080")
}
这段代码定义了一个BasicAuthFunc
类型的函数,用于检查用户名和密码是否匹配。BasicAuth
中间件会从请求中获取认证信息,并调用这个函数进行认证。如果认证失败,则返回401错误;如果成功,则继续处理请求。在main
函数中,我们定义了一个示例的认证函数,并将其作为参数传递给BasicAuth
中间件。
评论已关闭