Эх сурвалжийг харах

反向代理真实IP获取

yxh 5 жил өмнө
parent
commit
af82b29224

+ 2 - 1
hook/hook.go

@@ -5,6 +5,7 @@ import (
 	"gfast/app/service/admin/auth_service"
 	"gfast/app/service/admin/monitor_service"
 	"gfast/app/service/admin/user_service"
+	"gfast/library/utils"
 	"github.com/gogf/gf/frame/g"
 	"github.com/gogf/gf/net/ghttp"
 	"github.com/gogf/gf/text/gstr"
@@ -31,5 +32,5 @@ func OperationLog(r *ghttp.Request) {
 			break
 		}
 	}
-	go monitor_service.OperationLogAdd(user, menu, url, r.GetMap(), r.Method, r.GetClientIp())
+	go monitor_service.OperationLogAdd(user, menu, url, r.GetMap(), r.Method, utils.GetClientIp(r))
 }

+ 4 - 4
library/service/service.go

@@ -100,11 +100,11 @@ func AdminLogin(r *ghttp.Request) (string, interface{}) {
 	password := utils.EncryptCBC(data["password"], utils.AdminCbcPublicKey)
 	var keys string
 	if AdminMultiLogin {
-		keys = data["username"] + password + gmd5.MustEncryptString(r.GetClientIp())
+		keys = data["username"] + password + gmd5.MustEncryptString(utils.GetClientIp(r))
 	} else {
 		keys = data["username"] + password
 	}
-	ip := r.GetClientIp()
+	ip := utils.GetClientIp(r)
 	userAgent := r.Header.Get("User-Agent")
 	if err, user := signIn(data["username"], password, r); err != nil {
 		go loginLog(0, data["username"], ip, userAgent, err.Error())
@@ -140,7 +140,7 @@ func AdminLoginAfter(r *ghttp.Request, respData gtoken.Resp) {
 			Token:      token,
 			CreateTime: gconv.Uint64(gtime.Timestamp()),
 			UserName:   userInfo.UserName,
-			Ip:         r.GetClientIp(),
+			Ip:         utils.GetClientIp(r),
 			Explorer:   explorer,
 			Os:         os,
 		}
@@ -200,7 +200,7 @@ func signIn(username, password string, r *ghttp.Request) (error, *user.User) {
 	returnData := *user
 	//更新登陆时间及ip
 	user.LastLoginTime = gconv.Int(gtime.Timestamp())
-	user.LastLoginIp = r.GetClientIp()
+	user.LastLoginIp = utils.GetClientIp(r)
 	user.Update()
 	return nil, &returnData
 }

+ 9 - 0
library/utils/tools.go

@@ -63,6 +63,15 @@ func GetLocalIP() (ip string, err error) {
 	return
 }
 
+//获取客户端IP
+func GetClientIp(r *ghttp.Request) string {
+	ip := r.Header.Get("X-Forwarded-For")
+	if ip == "" {
+		ip = r.GetClientIp()
+	}
+	return ip
+}
+
 //获取相差时间
 func GetHourDiffer(startTime, endTime string) int64 {
 	var hour int64