From e763aac526500393902a26203a999f8daa801f78 Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 11 Nov 2019 16:50:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=89=8B=E6=9C=BA=E5=8F=B7=E4=B8=BA=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E7=9A=84=E6=89=8B=E6=9C=BA=E5=8F=B7=EF=BC=8C?= =?UTF-8?q?user2/UpdateUserByMiniInfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth2/authprovider/weixin/weixin_mini.go | 28 ++++++++++++++--- controllers/auth2.go | 29 ----------------- controllers/cms_user2.go | 31 +++++++++++++++++++ routers/commentsRouter_controllers.go | 18 +++++------ 4 files changed, 63 insertions(+), 43 deletions(-) diff --git a/business/auth2/authprovider/weixin/weixin_mini.go b/business/auth2/authprovider/weixin/weixin_mini.go index bd95fb882..dcdc778ee 100644 --- a/business/auth2/authprovider/weixin/weixin_mini.go +++ b/business/auth2/authprovider/weixin/weixin_mini.go @@ -2,6 +2,7 @@ package weixin import ( "errors" + "fmt" "strings" "git.rosy.net.cn/baseapi/platformapi/weixinapi" @@ -44,12 +45,29 @@ func (a *MiniAuther) VerifySecret(dummy, jsCode string) (authBindEx *auth2.AuthB } // 特殊接口 -func (a *MiniAuther) DecryptData(authInfo *auth2.AuthInfo, encryptedData, iv string) (decryptedDataBase64 string, err error) { - globals.SugarLogger.Debugf("weixin mini DecryptData encryptedData:%s, iv:%s", encryptedData, iv) - if authInfo.AuthBindInfo.Type != AuthTypeMini { - return "", ErrAuthTypeShouldBeMini +func (a *MiniAuther) DecryptData(authInfo *auth2.AuthInfo, jsCode, encryptedData, iv string) (decryptedDataBase64 string, err error) { + globals.SugarLogger.Debugf("weixin mini DecryptData jsCode:%s, encryptedData:%s, iv:%s", jsCode, encryptedData, iv) + var sessionKey string + if jsCode != "" { + sessionInfo, err := ProxySNSCode2Session(jsCode) + if err == nil { + if authBindEx, err := a.UnionFindAuthBind(AuthTypeMini, []string{AuthTypeMini}, sessionInfo.OpenID, "", nil); err == nil { + if authBindEx.UserID != authInfo.GetID() { + return "", fmt.Errorf("jsCode与token不匹配") + } + } else { + return "", err + } + sessionKey = sessionInfo.SessionKey + } else { + return "", err + } + } else { + if authInfo.AuthBindInfo.Type != AuthTypeMini { + return "", ErrAuthTypeShouldBeMini + } + sessionKey = authInfo.AuthBindInfo.UserData.(string) } - sessionKey := authInfo.AuthBindInfo.UserData.(string) decryptedData, err := ProxySNSDecodeMiniProgramData(encryptedData, sessionKey, iv) if err != nil { return "", err diff --git a/controllers/auth2.go b/controllers/auth2.go index da3e17101..b769865ea 100644 --- a/controllers/auth2.go +++ b/controllers/auth2.go @@ -6,7 +6,6 @@ import ( "net/http" "strings" - "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding" @@ -14,7 +13,6 @@ import ( "git.rosy.net.cn/jx-callback/business/auth2/authprovider/password" "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego" ) @@ -297,30 +295,3 @@ func (c *Auth2Controller) ChangePassword() { return retVal, "", err }) } - -// @Title 解密小程序数据 -// @Description 解密小程序数据 -// @Param token header string true "认证token" -// @Param data formData string true "加密数据" -// @Param iv formData string true "iv" -// @Success 200 {object} controllers.CallResult -// @Failure 200 {object} controllers.CallResult -// @router /MiniDecryptData [post] -func (c *Auth2Controller) MiniDecryptData() { - c.callMiniDecryptData(func(params *tAuth2MiniDecryptDataParams) (retVal interface{}, errCode string, err error) { - authInfo, err := params.Ctx.GetV2AuthInfo() - if err == nil { - decryptedDataBase64, err2 := weixin.AutherObjMini.DecryptData(authInfo, params.Data, params.Iv) - if err = err2; err == nil { - var userInfo *weixinapi.MiniUserInfo - if err = utils.UnmarshalUseNumber([]byte(decryptedDataBase64), &userInfo); err == nil { - if user := params.Ctx.GetFullUser(); user != nil { - user.Avatar = userInfo.AvatarURL - dao.UpdateEntity(dao.GetDB(), user, "Avatar") - } - } - } - } - return retVal, "", err - }) -} diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 71698ec13..b7e0423ff 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -1,13 +1,16 @@ package controllers import ( + "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" + "git.rosy.net.cn/jx-callback/business/auth2/authprovider/weixin" "git.rosy.net.cn/jx-callback/business/authz" "git.rosy.net.cn/jx-callback/business/authz/autils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" "github.com/astaxie/beego" ) @@ -374,3 +377,31 @@ func (c *User2Controller) GetSelfInfo() { return retVal, "", err }) } + +// @Title 根据小程序jsCode修改用户信息 +// @Description 根据小程序jsCode修改用户信息 +// @Param token header string true "认证token" +// @Param jsCode query string true "小程序jsCode" +// @Param data query string true "加密数据" +// @Param iv query string true "iv" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /UpdateUserByMiniInfo [put] +func (c *Auth2Controller) UpdateUserByMiniInfo() { + c.callUpdateUserByMiniInfo(func(params *tAuth2UpdateUserByMiniInfoParams) (retVal interface{}, errCode string, err error) { + authInfo, err := params.Ctx.GetV2AuthInfo() + if err == nil { + decryptedDataBase64, err2 := weixin.AutherObjMini.DecryptData(authInfo, params.JsCode, params.Data, params.Iv) + if err = err2; err == nil { + var userInfo *weixinapi.MiniUserInfo + if err = utils.UnmarshalUseNumber([]byte(decryptedDataBase64), &userInfo); err == nil { + if user := params.Ctx.GetFullUser(); user != nil { + user.Avatar = userInfo.AvatarURL + dao.UpdateEntity(dao.GetDB(), user, "Avatar") + } + } + } + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index ae2d5f7d9..8f3d116fd 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -151,15 +151,6 @@ func init() { Filters: nil, Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"], - beego.ControllerComments{ - Method: "MiniDecryptData", - Router: `/MiniDecryptData`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"], beego.ControllerComments{ Method: "RemoveAuthBind", @@ -178,6 +169,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"], + beego.ControllerComments{ + Method: "UpdateUserByMiniInfo", + Router: `/UpdateUserByMiniInfo`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:Auth2Controller"], beego.ControllerComments{ Method: "WeixinMPOAuth2",