diff --git a/business/auth2/auth2.go b/business/auth2/auth2.go index c05e875a1..e27703c7c 100644 --- a/business/auth2/auth2.go +++ b/business/auth2/auth2.go @@ -90,6 +90,7 @@ var ( ErrIllegalAuthType = errors.New("非法的登录类型") ErrAuthTypeAlreadyExist = errors.New("要登录类型已经存在") ErrCaptchaIsNotOk = errors.New("图形校验码不正确") + ErrNeedV2Token = errors.New("需要V2版的TOKEN") ) func init() { diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index ad31ceaf7..b3beac6f6 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -5,6 +5,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" ) @@ -58,3 +59,29 @@ func RegisterUser(user *model.User, mobileVerifyCode string, inAuthInfo *auth2.A } return outAuthInfo, err } + +func GetUserBindAuthInfo(ctx *jxcontext.Context) (authList []*model.AuthBind, err error) { + authInfo, err := ctx.GetV2AuthInfo() + if err == nil { + return dao.GetUserBindAuthInfo(dao.GetDB(), authInfo.GetID()) + } + return nil, err +} + +func ChangeMobile2(ctx *jxcontext.Context, mobile, mobileVerifyCode string) (err error) { + authInfo, err := ctx.GetV2AuthInfo() + if err == nil { + mobileAuth, err2 := auth2.Login(auth2.AuthTypeMobile, mobile, auth2.UserIDNone, mobileVerifyCode) + if err = err2; err == nil { + if mobileAuth.IUser != nil && authInfo.GetID() != mobileAuth.GetID() { + return errors.New("手机号已经存在") + } + _, err = dao.UpdateEntityLogically(dao.GetDB(), &model.User{}, map[string]interface{}{ + "Mobile": mobile, + }, ctx.GetUserName(), map[string]interface{}{ + "UserID": authInfo.GetID(), + }) + } + } + return err +} diff --git a/business/jxutils/jxcontext/jxcontext.go b/business/jxutils/jxcontext/jxcontext.go index 4834ca472..3ff733c7a 100644 --- a/business/jxutils/jxcontext/jxcontext.go +++ b/business/jxutils/jxcontext/jxcontext.go @@ -122,6 +122,14 @@ func (ctx *Context) GetLoginInfo() IAuther { return ctx.userInfo } +func (ctx *Context) GetV2AuthInfo() (authInfo *auth2.AuthInfo, err error) { + authInfo, ok := ctx.userInfo.(*auth2.AuthInfo) + if ok { + return authInfo, nil + } + return nil, auth2.ErrNeedV2Token +} + func (ctx *Context) GetRootTask() tasksch.ITask { ctx.locker.RLock() defer ctx.locker.RUnlock() diff --git a/controllers/auth2.go b/controllers/auth2.go index 1d707efa5..56de2180a 100644 --- a/controllers/auth2.go +++ b/controllers/auth2.go @@ -2,7 +2,6 @@ package controllers import ( "encoding/base64" - "errors" "fmt" "net/http" @@ -11,15 +10,10 @@ 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/jxcallback/auth" - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "github.com/astaxie/beego" ) -var ( - ErrNeedV2Token = errors.New("需要V2版的TOKEN") -) - type Auth2Controller struct { beego.Controller } @@ -28,7 +22,7 @@ type Auth2Controller struct { // @Description 生成captcha // @Param width formData int true "图片宽" // @Param height formData int true "图片高" -// @Param captchaLen formData int false "验证码长度" +// @Param captchaLen formData int false captcha码长度" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /CreateCaptcha [post] @@ -40,9 +34,9 @@ func (c *Auth2Controller) CreateCaptcha() { } // @Title 发送验证码 -// @Description 发送验证码(图片验证码与authToken二者必须至少有一个) -// @Param captchaID formData string false "图片验证码ID" -// @Param captchaValue formData string false "图片验证码值" +// @Description 发送验证码(captcha码与authToken二者必须至少有一个) +// @Param captchaID formData string false "captcha码ID" +// @Param captchaValue formData string false "captcha码值" // @Param authToken formData string false "之前的认证信息" // @Param authID formData string true "手机号或邮件" // @Success 200 {object} controllers.CallResult @@ -157,7 +151,7 @@ func (c *Auth2Controller) Logout() { // @router /AddAuthBind [post] func (c *Auth2Controller) AddAuthBind() { c.callAddAuthBind(func(params *tAuth2AddAuthBindParams) (retVal interface{}, errCode string, err error) { - authInfo, err2 := getAuth2Info(params.Ctx) + authInfo, err2 := params.Ctx.GetV2AuthInfo() if err := err2; err == nil { newAuthInfo, err2 := auth2.GetTokenInfo(params.AuthToken) if err = err2; err == nil { @@ -177,7 +171,7 @@ func (c *Auth2Controller) AddAuthBind() { // @router /RemoveAuthBind [post] func (c *Auth2Controller) RemoveAuthBind() { c.callRemoveAuthBind(func(params *tAuth2RemoveAuthBindParams) (retVal interface{}, errCode string, err error) { - authInfo, err2 := getAuth2Info(params.Ctx) + authInfo, err2 := params.Ctx.GetV2AuthInfo() if err := err2; err == nil { err = auth2.UnbindAuth(authInfo, params.AuthType) } @@ -195,17 +189,10 @@ func (c *Auth2Controller) RemoveAuthBind() { // @router /ChangePassword [put] func (c *Auth2Controller) ChangePassword() { c.callChangePassword(func(params *tAuth2ChangePasswordParams) (retVal interface{}, errCode string, err error) { - authInfo, err := getAuth2Info(params.Ctx) + authInfo, err := params.Ctx.GetV2AuthInfo() if err == nil { err = password.AutherObj.ChangePassword(authInfo.GetID(), params.OldPwd, params.NewPwd) } return retVal, "", err }) } - -func getAuth2Info(ctx *jxcontext.Context) (authInfo *auth2.AuthInfo, err error) { - if authInfo, ok := ctx.GetLoginInfo().(*auth2.AuthInfo); ok { - return authInfo, err - } - return nil, ErrNeedV2Token -} diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index b3c14be89..50158be34 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -7,7 +7,6 @@ import ( "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" ) @@ -49,10 +48,22 @@ func (c *User2Controller) RegisterUser() { // @router /GetBindAuthInfo [get] func (c *User2Controller) GetBindAuthInfo() { c.callGetBindAuthInfo(func(params *tUser2GetBindAuthInfoParams) (retVal interface{}, errCode string, err error) { - authInfo, err := getAuth2Info(params.Ctx) - if err == nil { - retVal, err = dao.GetUserBindAuthInfo(dao.GetDB(), authInfo.GetID()) - } + retVal, err = cms.GetUserBindAuthInfo(params.Ctx) + return retVal, "", err + }) +} + +// @Title 修改手机号 +// @Description 修改手机号 +// @Param token header string true "认证token" +// @Param mobile query string true "新手机号" +// @Param mobileVerifyCode query string true "手机验证码(通过auth2.SendVerifyCode获得)" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /ChangeMobile [put] +func (c *User2Controller) ChangeMobile() { + c.callChangeMobile(func(params *tUser2ChangeMobileParams) (retVal interface{}, errCode string, err error) { + err = cms.ChangeMobile2(params.Ctx, params.Mobile, params.MobileVerifyCode) return retVal, "", err }) }