From 263c7b18ce7f18f1222318f6e0e499e907895a52 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期三, 13 十一月 2019 19:33:39 +0800
Subject: [PATCH] fix

---
 middlewares/auth/auth.go |   84 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 84 insertions(+), 0 deletions(-)

diff --git a/middlewares/auth/auth.go b/middlewares/auth/auth.go
index 8832b06..d897b00 100644
--- a/middlewares/auth/auth.go
+++ b/middlewares/auth/auth.go
@@ -1 +1,85 @@
 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{})interface{}
+	Logout(http *http.Request,w http.ResponseWriter) bool
+}
+
+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"){
+			jwtDriver :=NewJwtAuthDriver()
+			if !jwtDriver.Check(c) {
+				util.ResponseFormat(c,code.TokenNotFound,"灏氭湭鐧诲綍锛岃鐧诲綍")
+				c.Abort()
+			}
+			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()
+			}
+			c.Next()
+		} else {
+			c.Next()
+		}
+	}
+}
+
+func GetCurUser(c *gin.Context)map[string]interface{}{
+	return (*GenerateAuthDriver()).User(c)
+}
\ No newline at end of file

--
Gitblit v1.8.0