Browse Source

fix(用户登录):如果用户删除了,而对应的user_record记录表没有删除,那么在登录逻辑需要做解除绑定操作

Roc 3 years ago
parent
commit
953c2d195a
2 changed files with 47 additions and 28 deletions
  1. 34 26
      models/user_record.go
  2. 13 2
      services/user.go

+ 34 - 26
models/user_record.go

@@ -6,22 +6,22 @@ import (
 )
 
 type UserRecord struct {
-	UserRecordId int `orm:"column(user_record_id);pk"`
-	OpenId string `description:"用户openid,最大长度:32"`
-	UnionId string `description:"用户unionid,最大长度:64"`
-	Subscribe int `description:"是否关注"`
-	NickName string `descritpion:"用户昵称,最大长度:32"`
-	RealName string `descritpion:"用户实际名称,最大长度:32"`
-	BindAccount string `descritpion:"绑定时的账号,最大长度:128"`
-	Sex int `descritpion:"普通用户性别,1为男性,2为女性"`
-	Province string `description:"普通用户个人资料填写的省份,最大长度:30"`
-	City string `description:"普通用户个人资料填写的城市,最大长度:30"`
-	Country string `description:"国家,如中国为CN,最大长度:30"`
-	Headimgurl string `description:"用户第三方(微信)头像,最大长度:512"`
-	CreateTime time.Time `description:"创建时间,关系添加时间、用户授权时间"`
-	CreatePlatform int `description:"注册平台,1:日度点评公众号,2:管理后台,3:pc端网站,4:查研观向小程序;默认:1"`
-	SessionKey string `description:"微信小程序会话密钥,最大长度:255"`
-	UserId int `description:"用户id"`
+	UserRecordId   int       `orm:"column(user_record_id);pk"`
+	OpenId         string    `description:"用户openid,最大长度:32"`
+	UnionId        string    `description:"用户unionid,最大长度:64"`
+	Subscribe      int       `description:"是否关注"`
+	NickName       string    `descritpion:"用户昵称,最大长度:32"`
+	RealName       string    `descritpion:"用户实际名称,最大长度:32"`
+	BindAccount    string    `descritpion:"绑定时的账号,最大长度:128"`
+	Sex            int       `descritpion:"普通用户性别,1为男性,2为女性"`
+	Province       string    `description:"普通用户个人资料填写的省份,最大长度:30"`
+	City           string    `description:"普通用户个人资料填写的城市,最大长度:30"`
+	Country        string    `description:"国家,如中国为CN,最大长度:30"`
+	Headimgurl     string    `description:"用户第三方(微信)头像,最大长度:512"`
+	CreateTime     time.Time `description:"创建时间,关系添加时间、用户授权时间"`
+	CreatePlatform int       `description:"注册平台,1:日度点评公众号,2:管理后台,3:pc端网站,4:查研观向小程序;默认:1"`
+	SessionKey     string    `description:"微信小程序会话密钥,最大长度:255"`
+	UserId         int       `description:"用户id"`
 }
 
 //根据openid获取用户关系
@@ -32,38 +32,46 @@ func GetUserRecordByOpenId(openId string) (item *UserRecord, err error) {
 }
 
 //根据用户id和平台id获取用户关系
-func GetUserRecordByUserId(userId,platform int) (item *UserRecord, err error) {
+func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
 	sql := `SELECT * FROM user_record WHERE user_id=? AND create_platform = ?`
-	err = orm.NewOrm().Raw(sql, userId,platform).QueryRow(&item)
+	err = orm.NewOrm().Raw(sql, userId, platform).QueryRow(&item)
 	return
 }
 
 //添加用户关系
-func AddUserRecord(record *UserRecord) (recordId int64,err error) {
+func AddUserRecord(record *UserRecord) (recordId int64, err error) {
 	o := orm.NewOrm()
-	recordId,err = o.Insert(record)
+	recordId, err = o.Insert(record)
 	return
 }
 
 //根据openid绑定用户关系
-func BindUserRecordByOpenid(userId int,openId,bindAccount string)(err error)  {
+func BindUserRecordByOpenid(userId int, openId, bindAccount string) (err error) {
 	o := orm.NewOrm()
 	msql := " UPDATE user_record SET user_id = ?,bind_account=? WHERE open_id = ? "
-	_, err = o.Raw(msql, userId,bindAccount, openId).Exec()
+	_, err = o.Raw(msql, userId, bindAccount, openId).Exec()
+	return
+}
+
+//根据openid解除绑定用户关系
+func UnBindUserRecordByOpenid(openId string) (err error) {
+	o := orm.NewOrm()
+	msql := ` UPDATE user_record SET user_id = 0,bind_account="" WHERE open_id = ? `
+	_, err = o.Raw(msql, openId).Exec()
 	return
 }
 
 //修改用户微信信息
-func ModifyUserRecordInfo(openId,nickName, headimgUrl, city, province, country string, sex, userId int) (err error) {
+func ModifyUserRecordInfo(openId, nickName, headimgUrl, city, province, country string, sex, userId int) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE user_record SET nick_name=?,headimgurl=?,sex=?,city=?,province=?,country=? WHERE user_id=? and openid=? `
-	_, err = o.Raw(sql, nickName, headimgUrl, sex, city, province, country, userId,openId).Exec()
+	_, err = o.Raw(sql, nickName, headimgUrl, sex, city, province, country, userId, openId).Exec()
 	return
 }
 
 //获取该用户第一个的 三方信息(微信头像信息)
-func GetUserThirdRecordByUserId(userId int)  (item *UserRecord, err error) {
+func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
 	sql := `SELECT * FROM user_record WHERE user_id = ? order by user_record_id asc`
 	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
 	return
-}
+}

+ 13 - 2
services/user.go

@@ -45,9 +45,20 @@ func GetWxUserItemByOpenId(openid string) (item *models.WxUserItem, err error) {
 	if wxUserErr != nil {
 		err = wxUserErr
 
-		//如果是下面这个错误,那么这个可能是用户信息被删除,然后user_record表没有移除该条记录所绑定的user_id信息
+		//如果是找不到数据,那么可能是该用户被删除了,但是user_record没有删除对应的关系
 		if wxUserErr.Error() == utils.ErrNoRow() {
-			err = errors.New("用户信息不存在,openid:" + openid)
+			//用户被删除了,但是user_record没有删除对应的关系,那么去解除绑定
+			userUnbindErr := models.UnBindUserRecordByOpenid(openid)
+			if userUnbindErr != nil {
+				err = userUnbindErr
+				return
+			}
+			//返回状态为 用户未绑定 逻辑代码
+			err = ERR_USER_NOT_BIND
+			item = new(models.WxUserItem)
+			//格式化返回用户数据
+			formatWxUserAndUserRecord(item, userRecord)
+			return
 		}
 		return
 	}