Ver código fonte

添加用户不需要token的的手机登录处理

xingzai 2 anos atrás
pai
commit
536dee0cb0
3 arquivos alterados com 182 adições e 0 exclusões
  1. 172 0
      controllers/user.go
  2. 9 0
      routers/commentsRouter_controllers.go
  3. 1 0
      routers/router.go

+ 172 - 0
controllers/user.go

@@ -17,6 +17,10 @@ type UserController struct {
 	BaseAuthController
 }
 
+type UserCommonController struct {
+	BaseCommonController
+}
+
 // @Title 登录
 // @Description 登录接口
 // @Param	request	body models.LoginReq true "type json string"
@@ -1274,3 +1278,171 @@ func (this *UserController) HeadimgurlUpdate() {
 	br.Success = true
 	br.Msg = "操作成功"
 }
+
+// @Title 登录 (无需token)
+// @Description 登录接口 (无需token)
+// @Param	request	body models.LoginReq true "type json string"
+// @Success 200 {object} models.LoginResp
+// @router /loginPublic [post]
+func (this *UserCommonController) LoginPublic() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req models.LoginReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	user, err := models.GetWxUserItemByMobile(req.Mobile)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "登录失败!"
+		br.ErrMsg = "获取手机号用户信息失败,Err:" + err.Error()
+		return
+	}
+	if user == nil {
+		br.Msg = "用户不存在"
+		br.Ret = 408
+		return
+	}
+
+	userRecord, err := models.GetUserRecordByUserId(user.UserId, utils.WxPlatform)
+	if err != nil {
+		br.Msg = "用户不存在!"
+		br.ErrMsg = "用户OPID不存在,Err:" + err.Error()
+		return
+	}
+
+	unionId := userRecord.UnionId
+	openId := userRecord.OpenId
+	if unionId == "" {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误,unionId 为空"
+		return
+	}
+	if req.LoginType == 1 || req.LoginType == 3 {
+		if req.Mobile == "" {
+			br.Msg = "参数错误"
+			br.ErrMsg = "参数错误,手机号为空 为空"
+			return
+		}
+		if req.LoginType == 3 {
+			item, err := models.GetMsgCode(req.Mobile, req.VCode)
+			if err != nil {
+				if err.Error() == utils.ErrNoRow() {
+					br.Msg = "验证码错误,请重新输入"
+					br.ErrMsg = "校验验证码失败,Err:" + err.Error()
+					return
+				} else {
+					br.Msg = "验证码错误,请重新输入"
+					br.ErrMsg = "校验验证码失败,Err:" + err.Error()
+					return
+				}
+			}
+			if item == nil {
+				br.Msg = "验证码错误,请重新输入"
+				return
+			}
+		}
+		req.Mobile = strings.Trim(req.Mobile, " ")
+	} else if req.LoginType == 2 {
+		if req.Email == "" {
+			br.ErrMsg = "邮箱不能为空,请输入邮箱"
+			br.Msg = "邮箱不能为空,请输入邮箱"
+			return
+		}
+		if !utils.ValidateEmailFormatat(req.Email) {
+			br.ErrMsg = "邮箱格式错误,请重新输入"
+			br.Msg = "邮箱格式错误,请重新输入"
+			return
+		}
+		item, err := models.GetMsgCode(req.Email, req.VCode)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				br.Msg = "验证码错误,请重新输入"
+				br.ErrMsg = "校验验证码失败,Err:" + err.Error()
+				return
+			} else {
+				br.Msg = "验证码错误,请重新输入"
+				br.ErrMsg = "校验验证码失败,Err:" + err.Error()
+				return
+			}
+		}
+		if item == nil {
+			br.Msg = "验证码错误,请重新输入"
+			return
+		}
+	} else {
+		br.Msg = "无效的登录方式"
+		br.ErrMsg = "无效的登录方式,Err:" + err.Error()
+		return
+	}
+	if len(req.Mobile) >= 11 && req.CountryCode == "" {
+		req.CountryCode = "86"
+	}
+
+	user, err = services.BindWxUser(openId, req.Mobile, req.Email, req.CountryCode)
+	if err != nil {
+		br.Msg = "登录失败"
+		br.ErrMsg = "绑定手机号失败:" + err.Error()
+		return
+	}
+	userId := user.UserId
+	var token string
+	tokenItem, err := models.GetTokenByOpenId(openId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "登录失败"
+		br.ErrMsg = "登录失败,获取token失败:" + err.Error()
+		return
+	}
+	if tokenItem == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
+		timeUnix := time.Now().Unix()
+		timeUnixStr := strconv.FormatInt(timeUnix, 10)
+		token = utils.MD5(openId) + utils.MD5(timeUnixStr)
+		//新增session
+		{
+			session := new(models.CygxSession)
+			session.OpenId = unionId
+			session.UnionId = unionId
+			session.UserId = userId
+			session.CreatedTime = time.Now()
+			session.LastUpdatedTime = time.Now()
+			session.ExpireTime = time.Now().AddDate(0, 1, 0)
+			session.AccessToken = token
+			err = models.AddSession(session)
+			if err != nil {
+				br.Msg = "登录失败"
+				br.ErrMsg = "登录失败,新增用户session信息失败:" + err.Error()
+				return
+			}
+		}
+	} else {
+		token = tokenItem.AccessToken
+	}
+
+	//新增登录日志
+	{
+		loginLog := new(models.WxUserLog)
+		loginLog.UserId = userId
+		loginLog.OpenId = unionId
+		loginLog.Mobile = req.Mobile
+		loginLog.Email = req.Email
+		loginLog.CreateTime = time.Now()
+		loginLog.Handle = "wechat_user_login"
+		loginLog.Remark = token
+		go models.AddWxUserLog(loginLog)
+	}
+	resp := new(models.LoginResp)
+	resp.UserId = userId
+	resp.Authorization = token
+	if user.CompanyId == 1 {
+		resp.IsPotential = true
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Data = resp
+	br.Msg = "登录成功"
+}

+ 9 - 0
routers/commentsRouter_controllers.go

@@ -808,6 +808,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:UserCommonController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:UserCommonController"],
+        beego.ControllerComments{
+            Method: "LoginPublic",
+            Router: "/loginPublic",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:UserController"] = append(beego.GlobalControllerRouter["hongze/hongze_cygx/controllers:UserController"],
         beego.ControllerComments{
             Method: "ApplyTryOut",

+ 1 - 0
routers/router.go

@@ -40,6 +40,7 @@ func init() {
 		web.NSNamespace("/user",
 			web.NSInclude(
 				&controllers.UserController{},
+				&controllers.UserCommonController{},
 			),
 		),
 		web.NSNamespace("/permission",