|
@@ -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 = "登录成功"
|
|
|
+}
|