正在显示
10 个修改的文件
包含
250 行增加
和
6 行删除
| @@ -43,8 +43,8 @@ h5_host = "http://mmm-web-open-test.fjmaimaimai.com" | @@ -43,8 +43,8 @@ h5_host = "http://mmm-web-open-test.fjmaimaimai.com" | ||
| 43 | #审核中心 | 43 | #审核中心 |
| 44 | suplus_approve_host ="http://suplus-approve-dev.fjmaimaimai.com" | 44 | suplus_approve_host ="http://suplus-approve-dev.fjmaimaimai.com" |
| 45 | 45 | ||
| 46 | -#阿里云 https://media.goexample.live/ | ||
| 47 | -cname ="https://media.fjmaimaimai.com/" | 46 | +#阿里云 https://media.fjmaimaimai.com/ |
| 47 | +cname ="https://media.goexample.live/" | ||
| 48 | 48 | ||
| 49 | #企业平台 | 49 | #企业平台 |
| 50 | BUSINESS_ADMIN_SERVICE_HOST ="${BUSINESS_ADMIN_SERVICE_HOST||http://suplus-business-admin-test.fjmaimaimai.com}" | 50 | BUSINESS_ADMIN_SERVICE_HOST ="${BUSINESS_ADMIN_SERVICE_HOST||http://suplus-business-admin-test.fjmaimaimai.com}" |
| @@ -202,6 +202,7 @@ func CheckToken(ctx *context.Context) (result bool) { | @@ -202,6 +202,7 @@ func CheckToken(ctx *context.Context) (result bool) { | ||
| 202 | if strings.HasSuffix(ctx.Request.RequestURI, "loginModule") || | 202 | if strings.HasSuffix(ctx.Request.RequestURI, "loginModule") || |
| 203 | strings.HasSuffix(ctx.Request.RequestURI, "accessToken") || | 203 | strings.HasSuffix(ctx.Request.RequestURI, "accessToken") || |
| 204 | strings.HasSuffix(ctx.Request.RequestURI, "refreshToken") || | 204 | strings.HasSuffix(ctx.Request.RequestURI, "refreshToken") || |
| 205 | + strings.HasSuffix(ctx.Request.RequestURI, "authorize") || | ||
| 205 | strings.HasSuffix(ctx.Request.RequestURI, "smsCode") { | 206 | strings.HasSuffix(ctx.Request.RequestURI, "smsCode") { |
| 206 | return true | 207 | return true |
| 207 | } | 208 | } |
| @@ -43,6 +43,27 @@ func (this *AuthController) Login() { | @@ -43,6 +43,27 @@ func (this *AuthController) Login() { | ||
| 43 | msg = protocol.NewReturnResponse(auth.Login(header, request)) | 43 | msg = protocol.NewReturnResponse(auth.Login(header, request)) |
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | +//Authorize 模块认证 (登录V2版本) | ||
| 47 | +// @router /authorize [post] | ||
| 48 | +func (this *AuthController) Authorize() { | ||
| 49 | + var msg *protocol.ResponseMessage | ||
| 50 | + defer func() { | ||
| 51 | + this.Resp(msg) | ||
| 52 | + }() | ||
| 53 | + var request *protocol.AuthorizeRequest | ||
| 54 | + if err := json.Unmarshal(this.ByteBody, &request); err != nil { | ||
| 55 | + log.Error(err) | ||
| 56 | + msg = protocol.BadRequestParam(1) | ||
| 57 | + return | ||
| 58 | + } | ||
| 59 | + if b, m := this.Valid(request); !b { | ||
| 60 | + msg = m | ||
| 61 | + return | ||
| 62 | + } | ||
| 63 | + header := controllers.GetRequestHeader(this.Ctx) | ||
| 64 | + msg = protocol.NewReturnResponse(auth.Authorize(header, request)) | ||
| 65 | +} | ||
| 66 | + | ||
| 46 | //SmsCode | 67 | //SmsCode |
| 47 | // @router /smsCode [post] | 68 | // @router /smsCode [post] |
| 48 | func (this *AuthController) SmsCode() { | 69 | func (this *AuthController) SmsCode() { |
| @@ -4,12 +4,12 @@ const ( | @@ -4,12 +4,12 @@ const ( | ||
| 4 | RegionID = "cn-shanghai" | 4 | RegionID = "cn-shanghai" |
| 5 | 5 | ||
| 6 | //公司 | 6 | //公司 |
| 7 | - AccessKeyID = "LTAI4Fz1LUBW2fXp6QWaJHRS" | ||
| 8 | - AccessKeySecret = "aLZXwK8pgrs10Ws03qcN7NsrSXFVsg" | 7 | + //AccessKeyID = "LTAI4Fz1LUBW2fXp6QWaJHRS" |
| 8 | + //AccessKeySecret = "aLZXwK8pgrs10Ws03qcN7NsrSXFVsg" | ||
| 9 | 9 | ||
| 10 | //个人 | 10 | //个人 |
| 11 | - //AccessKeyID = "LTAI4FhiZ3UktC6N1u3H5GFC" | ||
| 12 | - //AccessKeySecret = "UyspWwdni55CYQ02hUCint4qY2jNYO" | 11 | + AccessKeyID = "LTAI4FhiZ3UktC6N1u3H5GFC" |
| 12 | + AccessKeySecret = "UyspWwdni55CYQ02hUCint4qY2jNYO" | ||
| 13 | ) | 13 | ) |
| 14 | 14 | ||
| 15 | const ( | 15 | const ( |
| @@ -59,6 +59,18 @@ type LoginResponse struct { | @@ -59,6 +59,18 @@ type LoginResponse struct { | ||
| 59 | AuthCode string `json:"authCode"` | 59 | AuthCode string `json:"authCode"` |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | +/*Authorize 模块认证 (登录V2版本)*/ | ||
| 63 | +type AuthorizeRequest struct { | ||
| 64 | + Token string `json:"credentials" valid:"Required;"` //登录凭证 | ||
| 65 | + ClientId string `json:"clientId"` //客户端密钥 | ||
| 66 | + Uid int64 `json:"cuid" valid:"Required;"` //统一用户中心用户 UID | ||
| 67 | + Cid int64 `json:"cid" valid:"Required;"` //统一用户中心公司 ID | ||
| 68 | + Muid int64 `json:"muid" valid:"Required;"` //企业平台中的用户 UID | ||
| 69 | +} | ||
| 70 | +type AuthorizeResponse struct { | ||
| 71 | + AuthCode string `json:"authCode"` | ||
| 72 | +} | ||
| 73 | + | ||
| 62 | /*统一用户中心登录*/ | 74 | /*统一用户中心登录*/ |
| 63 | type UserCenterLoginRequest struct { | 75 | type UserCenterLoginRequest struct { |
| 64 | Phone string `json:"phone"` | 76 | Phone string `json:"phone"` |
| @@ -65,6 +65,7 @@ type UserStatisticsResponse struct { | @@ -65,6 +65,7 @@ type UserStatisticsResponse struct { | ||
| 65 | 65 | ||
| 66 | type User struct { | 66 | type User struct { |
| 67 | UserId int64 `json:"uid"` | 67 | UserId int64 `json:"uid"` |
| 68 | + MUserId int64 `json:"muid"` //中台用户ID | ||
| 68 | Name string `json:"uname"` | 69 | Name string `json:"uname"` |
| 69 | Phone string `json:"phone"` | 70 | Phone string `json:"phone"` |
| 70 | Image Picture `json:"image"` | 71 | Image Picture `json:"image"` |
| @@ -49,6 +49,14 @@ func init() { | @@ -49,6 +49,14 @@ func init() { | ||
| 49 | 49 | ||
| 50 | beego.GlobalControllerRouter["opp/controllers/v1:AuthController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:AuthController"], | 50 | beego.GlobalControllerRouter["opp/controllers/v1:AuthController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:AuthController"], |
| 51 | beego.ControllerComments{ | 51 | beego.ControllerComments{ |
| 52 | + Method: "Authorize", | ||
| 53 | + Router: `/authorize`, | ||
| 54 | + AllowHTTPMethods: []string{"post"}, | ||
| 55 | + MethodParams: param.Make(), | ||
| 56 | + Params: nil}) | ||
| 57 | + | ||
| 58 | + beego.GlobalControllerRouter["opp/controllers/v1:AuthController"] = append(beego.GlobalControllerRouter["opp/controllers/v1:AuthController"], | ||
| 59 | + beego.ControllerComments{ | ||
| 52 | Method: "Login", | 60 | Method: "Login", |
| 53 | Router: `/loginModule`, | 61 | Router: `/loginModule`, |
| 54 | AllowHTTPMethods: []string{"post"}, | 62 | AllowHTTPMethods: []string{"post"}, |
| @@ -161,6 +161,35 @@ func CheckUserModuleAuth(uid int64) (auth bool) { | @@ -161,6 +161,35 @@ func CheckUserModuleAuth(uid int64) (auth bool) { | ||
| 161 | return response.UserAuth | 161 | return response.UserAuth |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | +func GetUserModuleAuth(uid int64) (message *protocol.Message, auth bool) { | ||
| 165 | + var req = NewRequest(fmt.Sprintf("%v%v", beego.AppConfig.String("BUSINESS_ADMIN_SERVICE_HOST"), MethodUserAuth), http.MethodPost) | ||
| 166 | + message = &protocol.Message{} | ||
| 167 | + auth = false | ||
| 168 | + var request = struct { | ||
| 169 | + UserId string `json:"userId"` | ||
| 170 | + PlatformId string `json:"platformId"` | ||
| 171 | + }{UserId: fmt.Sprintf("%v", uid), PlatformId: "3"} //平台id:1素+;2问题;3机会;18价值 | ||
| 172 | + var response = struct { | ||
| 173 | + UserAuth bool `json:"userAuth"` | ||
| 174 | + }{} | ||
| 175 | + if data, err := req.ActionDefault(request, &message); err != nil { | ||
| 176 | + log.Error(err) | ||
| 177 | + return | ||
| 178 | + } else { | ||
| 179 | + log.Debug(req.Url, uid, string(data)) | ||
| 180 | + } | ||
| 181 | + if message.Errno != 0 { | ||
| 182 | + log.Debug("CheckUserModuleAuth :", message.Errno, message.Errmsg) | ||
| 183 | + return | ||
| 184 | + } | ||
| 185 | + if err := json.Unmarshal(message.Data, &response); err != nil { | ||
| 186 | + log.Error(err, message, string(message.Data)) | ||
| 187 | + return | ||
| 188 | + } | ||
| 189 | + auth = response.UserAuth | ||
| 190 | + return | ||
| 191 | +} | ||
| 192 | + | ||
| 164 | type Request struct { | 193 | type Request struct { |
| 165 | HttpReq *httplib.BeegoHTTPRequest | 194 | HttpReq *httplib.BeegoHTTPRequest |
| 166 | Url string | 195 | Url string |
| @@ -281,6 +281,177 @@ Success: | @@ -281,6 +281,177 @@ Success: | ||
| 281 | return | 281 | return |
| 282 | } | 282 | } |
| 283 | 283 | ||
| 284 | +//模块认证 (登录V2版本) | ||
| 285 | +func Authorize(header *protocol.RequestHeader, request *protocol.AuthorizeRequest) (rsp *protocol.AuthorizeResponse, err error) { | ||
| 286 | + var () | ||
| 287 | + rsp = &protocol.AuthorizeResponse{} | ||
| 288 | + var ( | ||
| 289 | + user *models.User | ||
| 290 | + userAuth *models.UserAuth | ||
| 291 | + id = request.Uid | ||
| 292 | + getUserRequest *protocol.UCenterServerLoginRequest = &protocol.UCenterServerLoginRequest{ | ||
| 293 | + Uid: id, | ||
| 294 | + Token: request.Token, | ||
| 295 | + Type: 2, | ||
| 296 | + CompanyId: request.Cid, //当前登录的公司编号 | ||
| 297 | + } | ||
| 298 | + getUserResponse *protocol.UCenterGetUserResponse | ||
| 299 | + message *protocol.Message | ||
| 300 | + //currentCompany *models.Company | ||
| 301 | + //companys []*models.Company | ||
| 302 | + userCompany *models.UserCompany | ||
| 303 | + company *models.Company | ||
| 304 | + ) | ||
| 305 | + //判断用户是否添加 | ||
| 306 | + user, err = models.GetUserByUcenterId(id) | ||
| 307 | + if err != nil { | ||
| 308 | + log.Error(err) | ||
| 309 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 310 | + return | ||
| 311 | + } | ||
| 312 | + //判断用户所属公司是否有权限 | ||
| 313 | + //if companys, err = models.GetCompanyByPermission(user.Id); err != nil { | ||
| 314 | + // log.Error(err) | ||
| 315 | + // err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 316 | + // return | ||
| 317 | + //} | ||
| 318 | + //if len(companys) == 0 { | ||
| 319 | + // err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 320 | + // return | ||
| 321 | + //} | ||
| 322 | + | ||
| 323 | + //权限验证 判断用户公司是否存在 | ||
| 324 | + if userCompany, err = models.GetUserCompanyById(request.Muid); err != nil { | ||
| 325 | + log.Error(err, request.Muid) | ||
| 326 | + err = protocol.NewErrWithMessage(2002, err) //TODO:用户不存在 | ||
| 327 | + return | ||
| 328 | + } | ||
| 329 | + if userCompany.Enable != 1 { | ||
| 330 | + err = protocol.NewErrWithMessage(2002, err) //TODO:用户无权限 | ||
| 331 | + log.Error(err) | ||
| 332 | + return | ||
| 333 | + } | ||
| 334 | + if company, err = models.GetCompanyById(request.Cid); err != nil || company.Enable != 1 { | ||
| 335 | + log.Error(err, request.Cid) | ||
| 336 | + err = protocol.NewErrWithMessage(2002, err) //TODO:公司模块不存在 | ||
| 337 | + return | ||
| 338 | + } | ||
| 339 | + if company.Enable != 1 { | ||
| 340 | + err = protocol.NewErrWithMessage(2002, err) //TODO:公司模块被禁用 | ||
| 341 | + log.Error(err) | ||
| 342 | + return | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + if !utils.ValidVersion(header.Version, protocol.RequireVersion) { | ||
| 346 | + log.Warn(fmt.Sprintf("版本不足 当前手机版本:%v 需要版本大于:%v", header.Version, protocol.RequireVersion)) | ||
| 347 | + err = protocol.NewCustomMessage(2002, "版本不足,请升级app") //账号不存在 | ||
| 348 | + return | ||
| 349 | + } | ||
| 350 | + //验证 当前登录的公司是否有模块权限 | ||
| 351 | + if err = CheckBusinessAuth(header, request.Muid); err != nil { | ||
| 352 | + log.Error(request.Muid, err) | ||
| 353 | + return | ||
| 354 | + } | ||
| 355 | + //获取最后一次公司编号给统一用户中心 | ||
| 356 | + //if u, e := models.GetUserAuthByUserId(user.Id, protocol.DeviceType); e == nil && user.UserCenterId == id { | ||
| 357 | + // if currentCompany, e = models.GetCompanyById(u.CurrentCompanyId); e == nil { | ||
| 358 | + // getUserRequest.CompanyId = currentCompany.UserCenterId | ||
| 359 | + // } | ||
| 360 | + //} | ||
| 361 | + | ||
| 362 | + //从用户中心获取用户信息 | ||
| 363 | + if _, err = agg.RequestUserCenter(protocol.MethodServerLogin, http.MethodPost, getUserRequest, &message); err != nil { | ||
| 364 | + log.Error(err) | ||
| 365 | + return | ||
| 366 | + } | ||
| 367 | + log.Debug(fmt.Sprintf("ucenter_id:%v user_id:%v getuser response:", request.Uid, request.Muid), message.Errno, message.Errmsg) | ||
| 368 | + if message.Errno == 0 && message.Errmsg == "ok" { | ||
| 369 | + if err = message.Unmarshal(&getUserResponse); err != nil { | ||
| 370 | + log.Error(err) | ||
| 371 | + return | ||
| 372 | + } | ||
| 373 | + } | ||
| 374 | + switch message.Errno { | ||
| 375 | + case -1: | ||
| 376 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 377 | + return | ||
| 378 | + case 0: | ||
| 379 | + goto Success | ||
| 380 | + case 2002: | ||
| 381 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 382 | + return | ||
| 383 | + case 10001: | ||
| 384 | + err = protocol.NewErrWithMessage(2002, err) //账号不存在 | ||
| 385 | + return | ||
| 386 | + case 10003: | ||
| 387 | + err = protocol.NewErrWithMessage(4140, err) //账号不存在 | ||
| 388 | + return | ||
| 389 | + default: | ||
| 390 | + log.Error(fmt.Sprintf("error_no:%v msg:%v", message.Errno, message.Errmsg)) | ||
| 391 | + err = protocol.NewErrWithMessage(4140, err) | ||
| 392 | + return | ||
| 393 | + } | ||
| 394 | + | ||
| 395 | +Success: | ||
| 396 | + { | ||
| 397 | + userAuth, err = models.GetUserAuthByUserId(user.Id, 1) | ||
| 398 | + if err != nil { | ||
| 399 | + if err == orm.ErrNoRows { | ||
| 400 | + err = nil | ||
| 401 | + userAuth = &models.UserAuth{ | ||
| 402 | + UserId: user.Id, | ||
| 403 | + DeviceType: 1, //int8(header.DeviceType), | ||
| 404 | + CurrentCompanyId: request.Muid, | ||
| 405 | + CurrentUserCompanyId: request.Cid, | ||
| 406 | + } | ||
| 407 | + models.AddUserAuth(userAuth) | ||
| 408 | + } else { | ||
| 409 | + log.Error(err) | ||
| 410 | + return | ||
| 411 | + } | ||
| 412 | + } | ||
| 413 | + userAuth.AuthCode = uid.NewV1().StringNoDash() | ||
| 414 | + userAuth.CurrentCompanyId = request.Cid | ||
| 415 | + userAuth.CurrentUserCompanyId = request.Muid | ||
| 416 | + | ||
| 417 | + /*更新用户信息*/ | ||
| 418 | + user.CsAccount = getUserResponse.CustomerAccount | ||
| 419 | + user.ImToken = getUserResponse.ImToken | ||
| 420 | + user.Icon = getUserResponse.Avatar | ||
| 421 | + user.NickName = getUserResponse.NickName | ||
| 422 | + user.Accid = getUserResponse.Accid | ||
| 423 | + user.UserCenterId = getUserResponse.Id | ||
| 424 | + if err = models.UpdateUsersById(user); err != nil { | ||
| 425 | + log.Error(err) | ||
| 426 | + return | ||
| 427 | + } | ||
| 428 | + userAuth.AuthCodeExp = time.Now().Add(time.Second * protocol.TokenExpire) | ||
| 429 | + if err = models.UpdateUserAuthById(userAuth); err != nil { | ||
| 430 | + return | ||
| 431 | + } | ||
| 432 | + rsp = &protocol.AuthorizeResponse{AuthCode: userAuth.AuthCode} | ||
| 433 | + } | ||
| 434 | + err = protocol.NewSuccessWithMessage("登录成功") | ||
| 435 | + return | ||
| 436 | +} | ||
| 437 | + | ||
| 438 | +//检查企业平台权限 | ||
| 439 | +func CheckBusinessAuth(header *protocol.RequestHeader, muid int64) (err error) { | ||
| 440 | + var ( | ||
| 441 | + hasAuth bool | ||
| 442 | + authMessage *protocol.Message | ||
| 443 | + ) | ||
| 444 | + if authMessage, hasAuth = agg.GetUserModuleAuth(muid); !hasAuth { | ||
| 445 | + err = protocol.NewCustomMessage(2002, authMessage.Errmsg) //账号不存在 | ||
| 446 | + return | ||
| 447 | + } | ||
| 448 | + if authMessage.Errno != 0 { | ||
| 449 | + err = protocol.NewCustomMessage(authMessage.Errno, authMessage.Errmsg) //账号不存在 | ||
| 450 | + return | ||
| 451 | + } | ||
| 452 | + return | ||
| 453 | +} | ||
| 454 | + | ||
| 284 | //统一用户中心登录 | 455 | //统一用户中心登录 |
| 285 | func UCenterLogin(header *protocol.RequestHeader, request *protocol.UCenterLoginRequest) (rsp *protocol.UCenterLoginResponse, err error) { | 456 | func UCenterLogin(header *protocol.RequestHeader, request *protocol.UCenterLoginRequest) (rsp *protocol.UCenterLoginResponse, err error) { |
| 286 | var ( | 457 | var ( |
| @@ -358,6 +358,7 @@ func UserInfo(header *protocol.RequestHeader, request *protocol.UserInfoRequest) | @@ -358,6 +358,7 @@ func UserInfo(header *protocol.RequestHeader, request *protocol.UserInfoRequest) | ||
| 358 | rsp = &protocol.UserInfoResponse{ | 358 | rsp = &protocol.UserInfoResponse{ |
| 359 | User: protocol.User{ | 359 | User: protocol.User{ |
| 360 | UserId: header.UserId, | 360 | UserId: header.UserId, |
| 361 | + MUserId: header.UserId, | ||
| 361 | Name: userBaseAgg.User.NickName, | 362 | Name: userBaseAgg.User.NickName, |
| 362 | Phone: userBaseAgg.User.Phone, | 363 | Phone: userBaseAgg.User.Phone, |
| 363 | Image: protocol.Picture{ | 364 | Image: protocol.Picture{ |
-
请 注册 或 登录 后发表评论