从golang-gin-realworld-example-app项目学写httpapi (五)

it2022-05-05  191

从golang-gin-realworld-example-app项目学写httpapi (五)

https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/middlewares.go

中间件定义

package users import ( "net/http" "strings" "github.com/dgrijalva/jwt-go/request" "github.com/gin-gonic/gin" "github.com/wangzitian0/golang-gin-starter-kit/common" ) // 请求头 认证参数前缀标注TOKEN处理, 不使用默认的Bearer标注,而是用TOKEN // 函数 返回TOKEN字符串值 func stripBearerPrefixFromTokenString(tok string) (string, error) { if len(tok) > 5 && strings.ToUpper(tok[0:6]) == "TOKEN " { return tok[6:], nil } return tok, nil } // 从请求头获取 Authorization 参数内容 var AuthorizationHeaderExtractor = &request.PostExtractionFilter{ request.HeaderExtractor{"Authorization"}, stripBearerPrefixFromTokenString, } // 从AuthorizationHeaderExtractor获取 access_token 参数内容 var MyAuth2Extractor = &request.MultiExtractor{ AuthorizationHeaderExtractor, request.ArgumentExtractor{"access_token"}, } // 函数 更新用户上下文相关内容 func UpdateContextUserModel(c *gin.Context, my_user_id uint) { var myUserModel UserModel if my_user_id != 0 { db := common.GetDB() db.First(&myUserModel, my_user_id) } c.Set("my_user_id", my_user_id) c.Set("my_user_model", myUserModel) } // 函数 用户自定义的中间件, 使用 r.Use(AuthMiddleware(true)) func AuthMiddleware(auto401 bool) gin.HandlerFunc { return func(c *gin.Context) { // 初始化用户上下文,用户ID初值为0, 用户初值为nil UpdateContextUserModel(c, 0) // 获取请求中的token内容,并解密为token对象 token, err := request.ParseFromRequest(c.Request, MyAuth2Extractor, func(token *jwt.Token) (interface{}, error) { b := ([]byte(common.NBSecretPassword)) return b, nil }) if err != nil { // 中间件开关为true时,返回认证错误信息 if auto401 { c.AbortWithError(http.StatusUnauthorized, err) } return } // 成功获取payload信息并且校验成功,调用函数更新用户上下文 if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid { my_user_id := uint(claims["id"].(float64)) //fmt.Println(my_user_id, claims["id"]) UpdateContextUserModel(c, my_user_id) } } } posted on 2018-11-20 10:46 北京涛子 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/liujitao79/p/9987559.html

相关资源:各显卡算力对照表!

最新回复(0)