From 7c811247ecf143e08c576986a884bedadc57dd66 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期五, 05 六月 2020 18:29:41 +0800 Subject: [PATCH] add refresh token to resp --- middlewares/auth/auth.go | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 87 insertions(+), 0 deletions(-) diff --git a/middlewares/auth/auth.go b/middlewares/auth/auth.go index 8832b06..d0255fc 100644 --- a/middlewares/auth/auth.go +++ b/middlewares/auth/auth.go @@ -1 +1,88 @@ package auth + +import ( + "github.com/gin-gonic/gin" + "net/http" + "strings" + "sync" + "webserver/extend/code" + "webserver/extend/util" +) + +const ( + TokenKey = "abc123456789" +) + +type Auth interface { + Check(c *gin.Context)bool + User(c *gin.Context)map[string]interface{} + Login(http *http.Request,w http.ResponseWriter,user map[string]interface{}) (bool, string, string) + Logout(http *http.Request,w http.ResponseWriter) bool + RefreshToken(tokenStr string) (bool, string, string) +} + +func GenerateAuthDriver() *Auth { + var authDriver Auth + authDriver = NewJwtAuthDriver() + return &authDriver +} + +var outUserM = make(map[string]string,0) +var lock sync.RWMutex + +func SetOutUser(userId string) { + lock.Lock() + defer lock.Unlock() + outUserM[userId] = userId +} + +func OutUser(userId string) bool { + lock.Lock() + defer lock.Unlock() + if _,ok := outUserM[userId];ok{ + return true + } + return false +} + +func RemoveOutUser(userId string) { + lock.Lock() + defer lock.Unlock() + if _,ok := outUserM[userId];ok{ + delete(outUserM,userId) + } +} + +func AuthHandler() gin.HandlerFunc { + return func(c *gin.Context) { + urlPath := c.Request.URL.Path + + if strings.Contains(urlPath,"/data/api-") && !strings.Contains(urlPath,"login") && !strings.Contains(urlPath, "/data/api-v/license") && !strings.Contains(urlPath, "/data/api-v/info/"){ + jwtDriver :=NewJwtAuthDriver() + if !jwtDriver.Check(c) { + util.ResponseFormat(c,code.TokenNotFound,"灏氭湭鐧诲綍锛岃鐧诲綍") + c.Abort() + return + } + userM := (*jwtDriver).User(c) + if userM == nil { + util.ResponseFormat(c,code.TokenNotFound,"灏氭湭鐧诲綍锛岃鐧诲綍") + c.Abort() + return + } + userId := userM["id"].(string) + if OutUser(userId) { + util.ResponseFormat(c,code.TokenNotFound,"灏氭湭鐧诲綍锛岃鐧诲綍") + c.Abort() + return + } + c.Next() + } else { + c.Next() + } + } +} + +func GetCurUser(c *gin.Context)map[string]interface{}{ + return (*GenerateAuthDriver()).User(c) +} -- Gitblit v1.8.0