kobe6258 пре 8 месеци
родитељ
комит
6a6e1137a8

+ 16 - 2
common/component/es/es.go

@@ -199,6 +199,13 @@ func (req *ESQueryRequest) parseJsonQuery() (queryMap map[string]interface{}) {
 					req.Column: req.Key,
 				},
 			},
+			"highlight": map[string]interface{}{
+				"fields": map[string]interface{}{
+					req.Column: map[string]interface{}{},
+				},
+				"pre_tags":  []string{"<span style='color:#0078E8'>"},
+				"post_tags": []string{"</span>"},
+			},
 		}
 		return
 	case MatchAllByCondition:
@@ -219,6 +226,13 @@ func (req *ESQueryRequest) parseJsonQuery() (queryMap map[string]interface{}) {
 					},
 				},
 			},
+			"highlight": map[string]interface{}{
+				"fields": map[string]interface{}{
+					req.Column: map[string]interface{}{},
+				},
+				"pre_tags":  []string{"<span style='color:#0078E8'>"},
+				"post_tags": []string{"</span>"},
+			},
 		}
 		return
 	case Match:
@@ -248,7 +262,7 @@ func (req *ESQueryRequest) parseJsonQuery() (queryMap map[string]interface{}) {
 				"fields": map[string]interface{}{
 					req.Column: map[string]interface{}{},
 				},
-				"pre_tags":  []string{"<span style='color:red'>"},
+				"pre_tags":  []string{"<span style='color:#0078E8'>"},
 				"post_tags": []string{"</span>"},
 			},
 			"post_filter": map[string]interface{}{
@@ -272,7 +286,7 @@ func (req *ESQueryRequest) parseJsonQuery() (queryMap map[string]interface{}) {
 				"fields": map[string]interface{}{
 					req.Column: map[string]interface{}{},
 				},
-				"pre_tags":  []string{"<span style='color:red'>"},
+				"pre_tags":  []string{"<span style='color:#0078E8'>"},
 				"post_tags": []string{"</span>"},
 			},
 			"post_filter": map[string]interface{}{

+ 4 - 2
common/component/wechat/wechat_client.go

@@ -8,7 +8,7 @@ import (
 	"eta/eta_mini_ht_api/common/contants"
 	"eta/eta_mini_ht_api/common/exception"
 	"eta/eta_mini_ht_api/common/utils/client"
-
+	"fmt"
 	"io"
 	"net/url"
 	"sync"
@@ -95,7 +95,6 @@ func (cli *Client) Login(code string) (wxUser WxUser, err error) {
 	defer func(Body io.ReadCloser) {
 		Body.Close()
 	}(res.Body)
-
 	if err != nil || res.StatusCode != 200 {
 		logger.Error("获取微信用户信息失败:%v", res.Status)
 		err = exception.New(exception.WeChatServerError)
@@ -108,6 +107,9 @@ func (cli *Client) Login(code string) (wxUser WxUser, err error) {
 		err = exception.New(exception.WeChatResponseError)
 		return
 	}
+
+	fmt.Println(data)
+
 	if data.Errcode != 0 {
 		logger.Error("获取用户信息失败:%v", data.Errmsg)
 		err = exception.New(exception.WechatUserInfoFailed)

+ 2 - 0
common/exception/exc_enums.go

@@ -60,6 +60,7 @@ const (
 	IllegalMessageId
 	IllegalAnalystId
 	ReadMessageFailed
+	BindMobileFailed
 )
 
 // WechatErrCode 微信
@@ -148,6 +149,7 @@ var ErrorMap = map[int]string{
 	MediaFoundFailed:          "查询媒体信息失败",
 	GetMediaListFailed:        "查询媒体列表失败",
 	GetAnalystMediaListFailed: "查询研究员媒体列表失败",
+	BindMobileFailed:          "绑定手机号失败",
 }
 
 func Equals(code int, message string) bool {

+ 12 - 10
controllers/user/auth_controller.go

@@ -9,6 +9,8 @@ import (
 	authUtils "eta/eta_mini_ht_api/common/utils/auth"
 	"eta/eta_mini_ht_api/controllers"
 	"eta/eta_mini_ht_api/service/auth"
+	"eta/eta_mini_ht_api/service/user"
+	"fmt"
 	"os"
 	"strings"
 )
@@ -21,7 +23,6 @@ const ChinaAreaCode = "86"
 
 // LoginReq  获取验证码请求
 type LoginReq struct {
-	Code       string `json:"code"`
 	VerifyCode string `json:"verifyCode"`
 	Mobile     string `json:"mobile"`
 	AreaCode   string `json:"areaCode"`
@@ -54,19 +55,18 @@ func (a *AuthController) Login() {
 			logger.Warn("验证码校验失败:%v", err)
 			return
 		}
+
+		userInfo := a.Ctx.Input.GetData("user").(user.User)
 		//注册用户或者登录
 		var token string
-		token, err = auth.Login(auth.LoginDTO{
-			VerifyCode: loginReq.VerifyCode,
-			Code:       loginReq.Code,
-			Mobile:     loginReq.Mobile,
-		})
+		err = auth.BindMobile(userInfo.Id, loginReq.Mobile, loginReq.AreaCode)
+		fmt.Println(token)
 		if err != nil {
 			a.FailedResult("登录失败", result)
 			return
 		}
 		a.SuccessResult("登录成功", &LoginResp{
-			Token: token,
+			//Token: token,
 		}, result)
 		return
 	})
@@ -117,7 +117,8 @@ func (a *AuthController) SMSCode() {
 }
 
 type RefreshTokenRes struct {
-	Token string `json:"token"`
+	Token        string `json:"token"`
+	IsBindMobile int    `json:"isBindMobile"`
 }
 
 // RefreshToken 更新token
@@ -133,14 +134,15 @@ func (a *AuthController) RefreshToken(code string) {
 			return result, exception.New(exception.WeChatCodeEmpty)
 		}
 		//刷新token
-		token, err := auth.RefreshToken(code)
+		token, isBindMobile, err := auth.RefreshToken(code)
 		if err != nil {
 			logger.Error("刷新token失败:%v", err)
 			a.FailedResult("刷新token失败", result)
 			return
 		}
 		a.SuccessResult("刷新token成功", RefreshTokenRes{
-			Token: token,
+			Token:        token,
+			IsBindMobile: isBindMobile,
 		}, result)
 		return
 	})

+ 24 - 0
domian/user/user_serivce.go

@@ -87,3 +87,27 @@ func convertToUserDTO(templateUser userDao.TemplateUser, dto *UserDTO) {
 	dto.OpenId = templateUser.OpenId
 	dto.UnionId = templateUser.UnionId
 }
+
+func BindUserMobile(userId int, mobile string) (err error) {
+	err = userDao.BindMobile(userId, mobile)
+	if err != nil {
+		if !errors.Is(err, gorm.ErrRecordNotFound) {
+			logger.Error("绑定手机号失败:%v", err)
+		}
+		return
+	}
+	return
+}
+
+func GetUserByOpenId(openId string) (UserDTO, error) {
+	var dto UserDTO
+	templateUser, err := userDao.GetUserByOpenId(openId)
+	if err != nil {
+		if !errors.Is(err, gorm.ErrRecordNotFound) {
+			logger.Error("查询用户失败:%v", err)
+		}
+		return dto, err
+	}
+	dto = convertUserDTO(templateUser)
+	return dto, nil
+}

+ 11 - 4
middleware/auth_middleware.go

@@ -9,6 +9,7 @@ import (
 	stringUtils "eta/eta_mini_ht_api/common/utils/string"
 	"eta/eta_mini_ht_api/controllers"
 	"eta/eta_mini_ht_api/service/user"
+	"fmt"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/context"
 	"strings"
@@ -37,7 +38,7 @@ func rd() *cache.RedisCache {
 }
 
 var publicRoutes = []string{
-	"/auth/*",
+	"/auth/refreshToken",
 }
 
 func AuthMiddleware() web.FilterFunc {
@@ -52,9 +53,11 @@ func AuthMiddleware() web.FilterFunc {
 				_ = ctx.JSONResp(rep)
 				return
 			}
+			fmt.Println(auth)
 			parts := strings.Split(auth, " ")
+			fmt.Println(len(parts))
 			if len(parts) != 2 || parts[0] != Bearer {
-				logger.Error("token参数不符合格式")
+				logger.Error("token参数不符合格式" + auth)
 				_ = ctx.JSONResp(rep)
 				return
 			}
@@ -64,16 +67,20 @@ func AuthMiddleware() web.FilterFunc {
 				_ = ctx.JSONResp(rep)
 				return
 			}
+			fmt.Println(info)
 			//校验redis中是否合法
-			redisToken := rd().GetString(redis.GenerateTokenKey(info.Mobile))
+			redisToken := rd().GetString(redis.GenerateTokenKey(info.OpenId))
 			if redisToken != parts[1] {
 				logger.Error("token无效:用户token已刷新")
 				_ = ctx.JSONResp(tokenExpired())
 				return
 			}
+			fmt.Println()
 			//组装用户信息
 			var userInfo user.User
-			userInfo, err = user.GetUserByMobile(info.Mobile)
+			userInfo, err = user.GetUserByOpenId(info.OpenId)
+
+			fmt.Println(userInfo)
 			if err != nil {
 				logger.Error("获取用户信息失败:%v", err)
 				_ = ctx.JSONResp(illegalUser())

+ 5 - 0
models/user/template_user.go

@@ -42,3 +42,8 @@ func RegisterTemplateUser(user *TemplateUser) (err error) {
 	err = models.Main().Create(&user).Error
 	return
 }
+
+func BindMobile(userId int, mobile string) (err error) {
+	err = models.Main().Table("template_users").Where("id = ?", userId).Updates(map[string]interface{}{"mobile": mobile, "updated_time": time.Now()}).Error
+	return
+}

+ 42 - 5
service/auth/auth_service.go

@@ -145,30 +145,67 @@ func Login(login LoginDTO) (token string, err error) {
 	return
 }
 
-func RefreshToken(code string) (token string, err error) {
+func BindMobile(userId int, mobile, verifyCode string) (err error) {
+	err = userService.BindUserMobile(userId, mobile)
+	if err != nil {
+		err = exception.New(exception.BindMobileFailed)
+		return
+	}
+	codeDTO := smsService.CodeDTO{
+		Mobile: mobile,
+		Code:   verifyCode,
+	}
+	//登录成功删除短信验证码,数据库留痕
+	err = rd().Delete(redis.GenerateSmsKey(mobile))
+	if err != nil {
+		logger.Error("清除redis 短信验证码失败,%v", err)
+		_ = rd().SetString(redis.GenerateSmsKey(mobile), "", 1)
+		return err
+	}
+	_ = smsService.TryVerifiedCode(codeDTO)
+	return
+}
+
+func RefreshToken(code string) (token string, isBindMobile int, err error) {
 	//注册用户
 	var wechatInfo wechat.WxUser
 	//微信请求异常
 	wechatInfo, err = wx().Login(code)
 	//微信客户端的异常不做处理,已经是EtaError
 	if err != nil {
+		fmt.Println("wx.Login,err:" + err.Error())
 		return
 	}
 	user, err := userService.GetTemplateUserByOpenId(wechatInfo.OpenId)
+	var isAdd bool
 	if err != nil {
-		err = exception.New(exception.TemplateUserNotFound)
-		return
+		if err == gorm.ErrRecordNotFound {
+			isAdd = true
+		} else {
+			err = exception.New(exception.TemplateUserNotFound)
+			return
+		}
 	}
-	token, err = jwt.CreateToken(user.OpenId, user.Mobile)
+	token, err = jwt.CreateToken(wechatInfo.OpenId, wechatInfo.OpenId)
 	if err != nil {
 		err = exception.New(exception.GenerateTokenFailed)
 		return
 	}
-	err = rd().SetString(redis.GenerateTokenKey(user.Mobile), token, 90*24*60*60)
+	err = rd().SetString(redis.GenerateTokenKey(wechatInfo.OpenId), token, 90*24*60*60)
 	if err != nil {
 		err = exception.New(exception.GenerateTokenFailed)
 		return
 	}
+	if user.Mobile == "" {
+		isBindMobile = 0
+	} else {
+		isBindMobile = 1
+	}
+	if isAdd {
+		user.OpenId = wechatInfo.OpenId
+		user.UnionId = wechatInfo.UnionId
+		err = userService.RegisterTemplateUser(&user)
+	}
 	return
 }
 func GetAreaCodes() (list []userService.AreaCodeDTO, err error) {

+ 9 - 0
service/user/user_service.go

@@ -169,6 +169,15 @@ func GetUserByMobile(mobile string) (user User, err error) {
 	}
 	return
 }
+
+func GetUserByOpenId(openId string) (user User, err error) {
+	userDTO, err := userService.GetUserByOpenId(openId)
+	if err == nil {
+		user = convertToUser(userDTO)
+	}
+	return
+}
+
 func convertToUser(userDTO userService.UserDTO) User {
 	return User{
 		Id:       userDTO.Id,