hongze 7 місяців тому
батько
коміт
3ca7ba5d5e

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

+ 2 - 0
common/exception/exc_enums.go

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

+ 1 - 0
common/utils/jwt/jwt_utils.go

@@ -33,6 +33,7 @@ func CreateToken(openId string, mobile string) (tokenString string, err error) {
 	if err != nil {
 	if err != nil {
 		logger.Error("生成token失败", err)
 		logger.Error("生成token失败", err)
 	}
 	}
+	tokenString = "Bearer " + tokenString
 	return
 	return
 }
 }
 
 

+ 1 - 1
conf/log/log_config.json

@@ -1,5 +1,5 @@
 {
 {
-  "filepath": "../etalogs",
+  "filepath": "./etalogs",
   "appenders": [
   "appenders": [
     {
     {
       "type": "console",
       "type": "console",

+ 12 - 10
controllers/user/auth_controller.go

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

+ 11 - 0
domian/user/user_serivce.go

@@ -87,3 +87,14 @@ func convertToUserDTO(templateUser userDao.TemplateUser, dto *UserDTO) {
 	dto.OpenId = templateUser.OpenId
 	dto.OpenId = templateUser.OpenId
 	dto.UnionId = templateUser.UnionId
 	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
+}

+ 6 - 1
middleware/auth_middleware.go

@@ -9,6 +9,7 @@ import (
 	stringUtils "eta/eta_mini_ht_api/common/utils/string"
 	stringUtils "eta/eta_mini_ht_api/common/utils/string"
 	"eta/eta_mini_ht_api/controllers"
 	"eta/eta_mini_ht_api/controllers"
 	"eta/eta_mini_ht_api/service/user"
 	"eta/eta_mini_ht_api/service/user"
+	"fmt"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web"
 	"github.com/beego/beego/v2/server/web/context"
 	"github.com/beego/beego/v2/server/web/context"
 	"strings"
 	"strings"
@@ -37,7 +38,7 @@ func rd() *cache.RedisCache {
 }
 }
 
 
 var publicRoutes = []string{
 var publicRoutes = []string{
-	"/auth/*",
+	"/auth/refreshToken",
 }
 }
 
 
 func AuthMiddleware() web.FilterFunc {
 func AuthMiddleware() web.FilterFunc {
@@ -52,7 +53,9 @@ func AuthMiddleware() web.FilterFunc {
 				_ = ctx.JSONResp(rep)
 				_ = ctx.JSONResp(rep)
 				return
 				return
 			}
 			}
+			fmt.Println(auth)
 			parts := strings.Split(auth, " ")
 			parts := strings.Split(auth, " ")
+			fmt.Println(len(parts))
 			if len(parts) != 2 || parts[0] != Bearer {
 			if len(parts) != 2 || parts[0] != Bearer {
 				logger.Error("token参数不符合格式")
 				logger.Error("token参数不符合格式")
 				_ = ctx.JSONResp(rep)
 				_ = ctx.JSONResp(rep)
@@ -74,6 +77,8 @@ func AuthMiddleware() web.FilterFunc {
 			//组装用户信息
 			//组装用户信息
 			var userInfo user.User
 			var userInfo user.User
 			userInfo, err = user.GetUserByMobile(info.Mobile)
 			userInfo, err = user.GetUserByMobile(info.Mobile)
+
+			fmt.Println(userInfo)
 			if err != nil {
 			if err != nil {
 				logger.Error("获取用户信息失败:%v", err)
 				logger.Error("获取用户信息失败:%v", err)
 				_ = ctx.JSONResp(illegalUser())
 				_ = 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
 	err = models.Main().Create(&user).Error
 	return
 	return
 }
 }
+
+func BindMobile(userId int, mobile string) (err error) {
+	err = models.Main().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
 	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
 	var wechatInfo wechat.WxUser
 	//微信请求异常
 	//微信请求异常
 	wechatInfo, err = wx().Login(code)
 	wechatInfo, err = wx().Login(code)
 	//微信客户端的异常不做处理,已经是EtaError
 	//微信客户端的异常不做处理,已经是EtaError
 	if err != nil {
 	if err != nil {
+		fmt.Println("wx.Login,err:" + err.Error())
 		return
 		return
 	}
 	}
 	user, err := userService.GetTemplateUserByOpenId(wechatInfo.OpenId)
 	user, err := userService.GetTemplateUserByOpenId(wechatInfo.OpenId)
+	var isAdd bool
 	if err != nil {
 	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 {
 	if err != nil {
 		err = exception.New(exception.GenerateTokenFailed)
 		err = exception.New(exception.GenerateTokenFailed)
 		return
 		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 {
 	if err != nil {
 		err = exception.New(exception.GenerateTokenFailed)
 		err = exception.New(exception.GenerateTokenFailed)
 		return
 		return
 	}
 	}
+	if user.Mobile == "" {
+		isBindMobile = 0
+	} else {
+		isBindMobile = 1
+	}
+	if isAdd {
+		user.OpenId = wechatInfo.OpenId
+		user.UnionId = wechatInfo.UnionId
+		err = userService.RegisterTemplateUser(&user)
+	}
 	return
 	return
 }
 }
 func GetAreaCodes() (list []userService.AreaCodeDTO, err error) {
 func GetAreaCodes() (list []userService.AreaCodeDTO, err error) {