icole 4 rokov pred
rodič
commit
3105aab519
1 zmenil súbory, kde vykonal 56 pridanie a 0 odobranie
  1. 56 0
      utils/auth/light_auth.go

+ 56 - 0
utils/auth/light_auth.go

@@ -5,12 +5,17 @@ import (
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
 	sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
 	sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
+	"github.com/xormplus/xorm"
+	"net"
+	"net/http"
 	"strings"
 )
 
 type LightAuth struct {
 }
 
+var session *xorm.Engine
+
 func init() {
 	lightAuth := &LightAuth{}
 	RegisterAuth("qianqiusoft.com", lightAuth)
@@ -81,7 +86,18 @@ func (la *LightAuth) Login(c *entitys.CtrlContext) {
 			c.Ctx.JSON(200, sysmodel.SysReturn{400, err.Error(), nil})
 			return
 		}
+		//登录日志
+		if session != nil {
+			ip := RemoteIp(c.Ctx.Request)
+			sql := "insert into log_sys_login (user_id,account,ip_addr,login_time,del_flag,login_type,user_name) values (?, ?,?,?,?,?,?)"
+			_, err = session.Exec(sql, user.Id, user.LoginId, ip, sysmodel.NowLocal().Value(), 0, 0, user.Name)
+			if err != nil {
+				c.Ctx.JSON(200, sysmodel.SysReturn{400, err.Error(), nil})
+				return
+			}
 
+		}
+		//
 		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
 	} else {
 		//fmt.Println(err.Error())
@@ -93,5 +109,45 @@ func (la *LightAuth) Logout(c *entitys.CtrlContext) {
 	token := c.Ctx.GetHeader("token")
 	fmt.Println("delete token: ", token)
 	sysutils.GetGlobalTokenStore().Remove(token)
+	//登录日志
+	tokenStore := sysutils.GetGlobalTokenStore()
+	tokenInfo := tokenStore.Get(token)
+	user := new(sysmodel.SysUser)
+	if session != nil && tokenInfo != nil {
+		_, err := c.PlatformDbEngine.Table(user.TableName()).Where("login_id = ?", tokenInfo.LoginID).Get(user)
+		if err != nil {
+			c.Ctx.JSON(200, sysmodel.SysReturn{400, err.Error(), nil})
+			return
+		}
+		ip := RemoteIp(c.Ctx.Request)
+		sql := "insert into log_sys_login (user_id,account,ip_addr,login_time,del_flag,login_type,user_name) values (?, ?,?,?,?,?,?)"
+		_, err = session.Exec(sql, user.Id, user.LoginId, ip, sysmodel.NowLocal().Value(), 0, 1, user.Name)
+		if err != nil {
+			c.Ctx.JSON(200, sysmodel.SysReturn{400, err.Error(), nil})
+			return
+		}
+	}
+	//
 	c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
 }
+
+const (
+	XForwardedFor = "X-Forwarded-For"
+	XRealIP       = "X-Real-IP"
+)
+
+// RemoteIp 返回远程客户端的 IP,如 192.168.1.1
+func RemoteIp(req *http.Request) string {
+	remoteAddr := req.RemoteAddr
+	if ip := req.Header.Get(XRealIP); ip != "" {
+		remoteAddr = ip
+	} else if ip = req.Header.Get(XForwardedFor); ip != "" {
+		remoteAddr = ip
+	} else {
+		remoteAddr, _, _ = net.SplitHostPort(remoteAddr)
+	}
+	if remoteAddr == "::1" {
+		remoteAddr = "127.0.0.1"
+	}
+	return remoteAddr
+}