Jelajahi Sumber

fix:匿名身份存储

duxin 1 tahun lalu
induk
melakukan
28671c047b
5 mengubah file dengan 76 tambahan dan 39 penghapusan
  1. 3 2
      src/go.mod
  2. 4 2
      src/go.sum
  3. 61 27
      src/jfw/filter/anonymousUser.go
  4. 4 4
      src/jfw/filter/logfilter.go
  5. 4 4
      src/jfw/front/login.go

+ 3 - 2
src/go.mod

@@ -1,14 +1,15 @@
 module jy/src
 
-go 1.20
+go 1.19
 
 require (
 	app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88
-	app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf
+	app.yhyue.com/moapp/jybase v0.0.0-20230828030111-c6369d0d5cfd
 	app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545
 	app.yhyue.com/moapp/jypkg v0.0.0-20230802005656-6379ddc03ee0
 	bp.jydev.jianyu360.cn/BaseService/userCenter v1.2.13
 	github.com/SKatiyar/qr v0.0.0-20151201054752-25b6bdf44e67
+	github.com/bwmarrin/snowflake v0.3.0
 	github.com/fsnotify/fsnotify v1.6.0
 	github.com/gogf/gf/v2 v2.4.4
 	github.com/robfig/cron v1.2.0

+ 4 - 2
src/go.sum

@@ -5,8 +5,8 @@ app.yhyue.com/moapp/jyMarketing v0.0.2-0.20230308011651-df591d32df88/go.mod h1:J
 app.yhyue.com/moapp/jyPoints v1.1.1/go.mod h1:SvP8p5L3jGrejHiH2LXfgCg/NPlFiKBC5Yd0gsI12FU=
 app.yhyue.com/moapp/jybase v0.0.0-20220427020729-974c1a148186/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a/go.mod h1:zB47XTeJvpcbtBRYgkQuxOICWNexiZfbUO+7aUf6mNs=
-app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf h1:/Tk5haITmGc5c3/y6VxyycIy/LBWO7aYlxTiHKxmzv0=
-app.yhyue.com/moapp/jybase v0.0.0-20230727083622-4dfc804ea6cf/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
+app.yhyue.com/moapp/jybase v0.0.0-20230828030111-c6369d0d5cfd h1:7FgWW5hm1BakK75upA8WpaekiXtUY6mVvUQfSYkEf/k=
+app.yhyue.com/moapp/jybase v0.0.0-20230828030111-c6369d0d5cfd/go.mod h1:D40Ae0rQilH8Hc5o2Vtt04Tjh/DNEFpcS3/WkJMPJb8=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545 h1:+Lak4m1zgsigQloOsvp8AJ+0XeX/+PGp9QP550xlbBQ=
 app.yhyue.com/moapp/jylog v0.0.0-20230522075550-05d7230ca545/go.mod h1:uFrsdUBFbETiJlEmr4PtJWPsZlUpPj2bHQRhryu6ggk=
 app.yhyue.com/moapp/jypkg v0.0.0-20230802005656-6379ddc03ee0 h1:EC5n/8wE9PnSSZxTTuAjDngI9YC41MPsRShbI8Z8v8Y=
@@ -120,6 +120,8 @@ github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P
 github.com/bos-hieu/mongostore v0.0.2/go.mod h1:8AbbVmDEb0yqJsBrWxZIAZOxIfv/tsP8CDtdHduZHGg=
 github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
 github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI=
+github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
+github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
 github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
 github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=

+ 61 - 27
src/jfw/filter/anonymousUser.go

@@ -2,6 +2,7 @@ package filter
 
 import (
 	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/encrypt"
 	"app.yhyue.com/moapp/jybase/go-xweb/httpsession"
 	"app.yhyue.com/moapp/jypkg/public"
 	"crypto/rand"
@@ -12,9 +13,11 @@ import (
 	"encoding/pem"
 	"errors"
 	"fmt"
+	"github.com/bwmarrin/snowflake"
 	"io/ioutil"
 	"log"
 	"net/http"
+	"strings"
 	"time"
 )
 
@@ -26,6 +29,10 @@ type AnonymousAuth struct {
 	SetSession map[string]interface{}
 }
 
+var (
+	node, _ = snowflake.NewNode(1)
+)
+
 func initPrivatePublicKey() {
 	// 读取私钥文件
 	privateKeyBytes, err := ioutil.ReadFile("rsa_private_key.pem")
@@ -87,33 +94,22 @@ func initPrivatePublicKey() {
 }
 
 func (sk *AnonymousAuth) Do() {
-	anonymousFid := sk.GetSession["anonymousFid"]
-	if anonymousFid != nil && anonymousFid != "" {
-		return
-	}
-	fid, err := sk.R.Cookie("fid")
-	if err != nil {
-		log.Println("匿名用户获取fid失败", err.Error())
-		return
-	}
-	eid, err := sk.R.Cookie("eid")
-	if err != nil {
-		log.Println("匿名用户获取eid失败", err.Error())
+	if sk.GetSession["mgoUserId"] != nil && sk.GetSession["mgoUserId"] != "" {
 		return
 	}
-	if fid.Value != "" && eid.Value != "" {
-		eData, err1 := Decryption(eid.Value)
-		if err1 != nil {
-			log.Printf("匿名用户eid:%s,fid:%s 解密失败err:%s", eid.Value, fid.Value, err1.Error())
-			return
-		}
-		if fid.Value != eData {
-			log.Printf("匿名用户身份验证不通过,eid:%s,fid:%s,eData:%s", eid.Value, fid.Value, eData)
-			return
-		}
-		sk.Session.Set("anonymousFid", fid.Value)
-		//未登录用户增加匿名身份信息
-		if sk.GetSession["mgoUserId"] == nil || sk.GetSession["mgoUserId"] == "" {
+	jyTrustedId, _ := sk.R.Cookie("JYTrustedId")
+	if jyTrustedId == nil || jyTrustedId.Value == "" { //不存在信用标识
+		jyGuestUID, _ := sk.R.Cookie("JYGuestUID")
+		if jyGuestUID == nil || jyGuestUID.Value == "" { //不存在后端id 生成后端id 并创建匿名身份信息
+			guestUID := node.Generate()
+			cookie := &http.Cookie{
+				Name:     "JYGuestUID",
+				Value:    util.InterfaceToStr(guestUID),
+				Path:     "/",
+				HttpOnly: true,
+			}
+			http.SetCookie(sk.W, cookie)
+			//未登录用户增加匿名身份信息
 			agent := sk.R.Header.Get("user-agent")
 			md, _ := json.Marshal(sk.R.Form)
 			str := string(md)
@@ -122,17 +118,55 @@ func (sk *AnonymousAuth) Do() {
 				"client":        agent,
 				"os":            util.GetOS(agent),
 				"browse":        util.GetBrowse(agent),
-				"fid":           fid.Value,
 				"url":           sk.R.RequestURI,
+				"guestUID":      util.InterfaceToStr(guestUID),
 				"mdescribe":     str,
 				"refer":         sk.R.Referer(),
 				"method":        sk.R.Method,
 				"creation_time": time.Now().Unix(),
 			}
 			public.BaseMysql.Insert("anonymous_identity", data)
+			return
+		}
+
+		fid, err := sk.R.Cookie("fid")
+		if err != nil {
+			//log.Println("匿名用户获取fid失败", err.Error())
+			return
+		}
+		eid, err := sk.R.Cookie("eid")
+		if err != nil {
+			//log.Println("匿名用户获取eid失败", err.Error())
+			return
+		}
+		if fid.Value != "" && eid.Value != "" {
+			eData, err1 := Decryption(eid.Value)
+			if err1 != nil {
+				//log.Printf("匿名用户eid:%s,fid:%s 解密失败err:%s", eid.Value, fid.Value, err1.Error())
+				return
+			}
+			if fid.Value != eData {
+				//log.Printf("匿名用户身份验证不通过,eid:%s,fid:%s,eData:%s", eid.Value, fid.Value, eData)
+				return
+			}
+			trustedId := encrypt.SE.EncodeString(fid.Value + "***" + jyGuestUID.Value)
+			cookie := &http.Cookie{
+				Name:     "JYTrustedId",
+				Value:    trustedId,
+				Path:     "/",
+				HttpOnly: true,
+			}
+			http.SetCookie(sk.W, cookie)
+			public.BaseMysql.Update("anonymous_identity", map[string]interface{}{"guestUID": jyGuestUID.Value},
+				map[string]interface{}{"fid": fid.Value, "trustedId": trustedId})
+		} else {
+			log.Println("无身份验证信息")
 		}
 	} else {
-		log.Println("无身份验证信息")
+		trustedId := encrypt.SE.DecodeString(jyTrustedId.Value)
+		if !strings.Contains(trustedId, "***") {
+			log.Println("无效信用id")
+		}
 	}
 }
 

+ 4 - 4
src/jfw/filter/logfilter.go

@@ -98,10 +98,10 @@ func (l *logFilter) addLog() {
 	s_url := l.R.RequestURI
 	md, _ := json.Marshal(l.R.Form)
 	str := string(md)
-	var fid string
-	fidCookie, _ := l.R.Cookie("fid")
+	var trustedId string
+	fidCookie, _ := l.R.Cookie("JYTrustedId")
 	if fidCookie != nil {
-		fid = fidCookie.Value
+		trustedId = fidCookie.Value
 	}
 	logs := map[string]interface{}{
 		"date":      timeNow.Unix(),
@@ -118,7 +118,7 @@ func (l *logFilter) addLog() {
 		"browse":    util.GetBrowse(agent),
 		"method":    l.R.Method,
 		"url":       s_url,
-		"fid":       fid,
+		"trustedId": trustedId,
 	}
 	if l.GetSession["userId"] != nil {
 		logs["userid"] = l.GetSession["userId"]

+ 4 - 4
src/jfw/front/login.go

@@ -109,7 +109,7 @@ func (l *Login) Login() error {
 					ok, _, userInfo := afterLogin(phone, l.Session())
 					if ok {
 						result["userInfo"] = userInfo
-						go anonymousLogin(l.Session(), l.Cookie("fid"))
+						go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
 						return 1, true
 					}
 				} else {
@@ -204,7 +204,7 @@ func (l *Login) Login() error {
 						}
 						if ok {
 							result["userInfo"] = userInfo
-							go anonymousLogin(l.Session(), l.Cookie("fid"))
+							go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
 							return 1, true
 						}
 					}
@@ -233,7 +233,7 @@ func (l *Login) Login() error {
 					ok, _, userInfo := afterLogin(phone, l.Session())
 					if ok {
 						result["userInfo"] = userInfo
-						go anonymousLogin(l.Session(), l.Cookie("fid"))
+						go anonymousLogin(l.Session(), l.Cookie("JYTrustedId"))
 						return 1, true
 					}
 				}
@@ -388,7 +388,7 @@ func anonymousLogin(session *httpsession.Session, fid string) {
 	sessionMap := session.GetMultiple()
 	positionId := sessionMap["positionId"]
 	mgoUserId := sessionMap["mgoUserId"]
-	queryData := map[string]interface{}{"positionId": positionId, "mgoUserId": mgoUserId, "fid": fid, "creation_time": time.Now().Unix()}
+	queryData := map[string]interface{}{"positionId": positionId, "mgoUserId": mgoUserId, "trustedId": fid, "creation_time": time.Now().Unix()}
 
 	//匿名用户登录后创建关联信息
 	public.BaseMysql.Insert("anonymous_association", queryData)