Эх сурвалжийг харах

Merge branch 'cygx/cygx_15.1' of http://8.136.199.33:3000/hongze/hongze_clpt

zhangchuanxing 1 долоо хоног өмнө
parent
commit
18f4144376

+ 6 - 1
controllers/base_auth.go

@@ -51,7 +51,7 @@ func (this *BaseAuthController) Prepare() {
 			session, err := models.GetSessionByToken(authorization)
 			if err != nil {
 				if err.Error() == utils.ErrNoRow() {
-					this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "Token 信息已变更:Token: " + authorization}, false, false)
+					this.JSON(models.BaseResponse{Ret: 408, Msg: "您的登录状态已过期,请重新登录", ErrMsg: "Token 信息已变更:Token: " + authorization}, false, false)
 					this.StopRun()
 					return
 				}
@@ -69,6 +69,11 @@ func (this *BaseAuthController) Prepare() {
 				nilWxUser := new(models.WxUserItem)
 				this.User = nilWxUser
 			} else {
+				if session.SessionStatus == 1 {
+					this.JSON(models.BaseResponse{Ret: 401, Msg: "您的账号在另一设备登录,当前设备已被迫下线。若不是您本人操作,请确保未泄露短信验证码或及时修改您的登录密码", ErrMsg: "sesson is empty "}, false, false)
+					this.StopRun()
+					return
+				}
 				wxUser, err := models.GetWxUserItemByMobile(session.Mobile)
 				if err != nil && err.Error() != utils.ErrNoRow() {
 					this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "获取信息失败 " + strconv.Itoa(session.UserId)}, false, false)

+ 6 - 1
controllers/base_auth_mobile.go

@@ -49,7 +49,7 @@ func (this *BaseAuthMobileController) Prepare() {
 				session, err := models.GetSessionByToken(authorization)
 				if err != nil {
 					if err.Error() == utils.ErrNoRow() {
-						this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "Token 信息已变更:Token: " + authorization}, false, false)
+						this.JSON(models.BaseResponse{Ret: 408, Msg: "您的登录状态已过期,请重新登录!", ErrMsg: "Token 信息已变更:Token: " + authorization}, false, false)
 						this.StopRun()
 						return
 					}
@@ -62,6 +62,11 @@ func (this *BaseAuthMobileController) Prepare() {
 					this.StopRun()
 					return
 				}
+				if session.SessionStatus == 1 {
+					this.JSON(models.BaseResponse{Ret: 401, Msg: "您的账号在另一设备登录,当前设备已被迫下线。若不是您本人操作,请确保未泄露短信验证码或及时修改您的登录密码", ErrMsg: "sesson is empty "}, false, false)
+					this.StopRun()
+					return
+				}
 				//wxUser, err := models.GetWxUserItemByUserId(session.UserId)
 				wxUser, err := models.GetWxUserItemByMobile(session.Mobile)
 				if err != nil && err != services.ERR_USER_NOT_BIND {

+ 2 - 2
controllers/user.go

@@ -115,8 +115,8 @@ func (this *UserCommonController) Login() {
 		itemsSession.AccessToken = token
 		itemsSession.CreatedTime = time.Now()
 		itemsSession.LastUpdatedTime = time.Now()
-		itemsSession.ExpireTime = time.Now().AddDate(0, 3, 0)
-		err = models.AddCygxClptSession(itemsSession)
+		itemsSession.ExpireTime = time.Now().AddDate(0, 0, 30)
+		err = services.HandleCygxMfyxWebSession(itemsSession)
 		if err != nil {
 			br.Msg = "获取用户信息失败"
 			br.ErrMsg = "添加Token失败,Err:" + err.Error()

+ 2 - 2
controllers/wechat.go

@@ -130,12 +130,12 @@ func (this *WechatCommonController) WechatLogin() {
 		itemsSession.AccessToken = token
 		itemsSession.CreatedTime = time.Now()
 		itemsSession.LastUpdatedTime = time.Now()
-		itemsSession.ExpireTime = time.Now().AddDate(0, 3, 0)
+		itemsSession.ExpireTime = time.Now().AddDate(0, 0, 30)
 		if user != nil {
 			itemsSession.UserId = user.UserId
 			itemsSession.Mobile = user.Mobile
 		}
-		err = models.AddCygxClptSession(itemsSession)
+		err = services.HandleCygxMfyxWebSession(itemsSession)
 		if err != nil {
 			br.Msg = "获取用户信息失败"
 			br.ErrMsg = "添加Token失败,Err:" + err.Error()

+ 10 - 1
models/session.go

@@ -7,7 +7,7 @@ import (
 
 func GetSessionByToken(token string) (item *CygxClptSession, err error) {
 	//sql := `SELECT * FROM cygx_clpt_session WHERE access_token=? AND expire_time> NOW() ORDER BY session_id DESC LIMIT 1 `
-	sql := `SELECT * FROM cygx_clpt_session WHERE access_token=?  ORDER BY session_id DESC LIMIT 1 `
+	sql := `SELECT * FROM cygx_clpt_session WHERE access_token=? AND expire_time> NOW() ORDER BY session_id DESC LIMIT 1 `
 	o := orm.NewOrm()
 	err = o.Raw(sql, token).QueryRow(&item)
 	return
@@ -23,6 +23,7 @@ type CygxClptSession struct {
 	LastUpdatedTime time.Time
 	OpenId          string `description:"用户openid,最大长度:32"`
 	UnionId         string `description:"用户unionid,最大长度:64"`
+	SessionStatus   int    `description:"token状态,0正常,1被顶号"`
 }
 
 // 添加用户session信息
@@ -69,3 +70,11 @@ func GetUserSessionByUserId(userId int) (item *CygxClptSession, err error) {
 	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
 	return
 }
+
+// 把其他有效token改为被顶号状态
+func UpdateSessionStatusByMobile(mobile, token string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_clpt_session SET session_status= 1   WHERE  mobile=? AND expire_time> NOW()  AND access_token != ?  `
+	_, err = o.Raw(sql, mobile, token).Exec()
+	return
+}

+ 14 - 0
services/user.go

@@ -713,3 +713,17 @@ func GetUserhasPermissionReportSelection(user *models.WxUserItem) (hasPermission
 	}
 	return
 }
+
+// 处理用户登录之后的session
+func HandleCygxMfyxWebSession(item *models.CygxClptSession) (err error) {
+	item.ExpireTime = time.Now().AddDate(0, 0, 30)
+	err = models.AddCygxClptSession(item)
+	if err != nil {
+		return
+	}
+
+	if item.Mobile != "" {
+		err = models.UpdateSessionStatusByMobile(item.Mobile, item.AccessToken)
+	}
+	return
+}