1234567891011121314151617181920212223242526272829303132333435
func auth() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method fullPath := c.FullPath() // 只有登录接口不需要进行鉴权验证 if method != "POST" && fullPath != "/login" { // 获取请求头的鉴权信息 token := c.GetHeader("Authorization") // 基础的一个判断是否符合要求 if token == "" || len(token) != 32 { c.AbortWithStatus(http.StatusUnauthorized) return } // 查询 Redis 或者 MySQL 等验证是否存在和获取基本信息 // 不存在的话抛出 AbortWithStatus ,中间件会结束请求的 // 假设你已经验证 token 是可用的,同时获取到了用户信息 uid := 1 // 保存鉴权信息 c.Set("uid", uid) } // 前置中间件 // ↑↑↑↑↑↑↑↑↑↑ c.Next() // ↓↓↓↓↓↓↓↓↓↓ // 后置中间件 }}
如何使用
12345678910111213141516171819202122232425262728293031
package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { r := gin.Default() // 当全局中间件 r.Use(auth()) g := r.Group("/v2") // 路由组中间件 g.Use(auth()) r.GET("/user", func(c *gin.Context) { // MustGet 和 Get 区别,MustGet 不存在会抛出 panic,Get 返回两个参数,第二个判断是不是存在 uid := c.MustGet("uid") c.String(http.StatusOK, uid.(string)) }) r.Run("127.0.0.1:9000")}func auth() gin.HandlerFunc { ...}
hongfs.ʕ◔ϖ◔ʔ
2023 新时代的广州传统美德我在绿灯的人行道上礼让电动车
文章
181
分类
13