فهرست منبع

fix:象屿登出接口

Roc 1 سال پیش
والد
کامیت
8fc75676b8
5فایلهای تغییر یافته به همراه124 افزوده شده و 1 حذف شده
  1. 2 0
      controllers/base_auth.go
  2. 38 1
      controllers/sys_user.go
  3. 9 0
      routers/commentsRouter.go
  4. 73 0
      services/user_login.go
  5. 2 0
      utils/config.go

+ 2 - 0
controllers/base_auth.go

@@ -50,6 +50,7 @@ var AdminOperateRecordMap = map[string]string{
 type BaseAuthController struct {
 	web.Controller
 	SysUser *system.Admin
+	Session *system.SysSession
 }
 
 func (c *BaseAuthController) Prepare() {
@@ -184,6 +185,7 @@ func (c *BaseAuthController) Prepare() {
 
 			admin.RoleTypeCode = GetSysUserRoleTypeCode(admin.RoleTypeCode)
 			c.SysUser = admin
+			c.Session = session
 
 			//接口权限校验
 			roleId := admin.RoleId

+ 38 - 1
controllers/sys_user.go

@@ -361,7 +361,6 @@ func (this *SysUserController) AuthCodeLogin() {
 	}
 	fmt.Println(req)
 
-	//data, e := services.CodeLoginFromMiddleServer(authCode)
 	data, e, errMsg := services.ThirdLogin(req)
 	if e != nil {
 		br.Msg = "获取失败"
@@ -405,6 +404,9 @@ func (this *SysUserController) SystemConfig() {
 	list = append(list, system.BusinessConf{
 		ConfKey: "LoginUrl",
 		ConfVal: conf["LoginUrl"],
+	}, system.BusinessConf{
+		ConfKey: "LogoutUrl",
+		ConfVal: conf["LogoutUrl"],
 	})
 
 	br.Data = list
@@ -412,3 +414,38 @@ func (this *SysUserController) SystemConfig() {
 	br.Success = true
 	br.Msg = "获取成功"
 }
+
+// Logout
+// @Title 登出接口
+// @Description 登出接口
+// @Success 200 Ret=200 获取成功
+// @router /logout [post]
+func (this *SysUserAuthController) Logout() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	services.ThirdLogout(this.Session.AccessToken)
+	//e := services.ThirdLogout(this.Session.AccessToken)
+	//if e != nil {
+	//	br.Msg = "登出失败"
+	//	br.ErrMsg = "登出失败, Err: " + e.Error()
+	//	return
+	//}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "登出成功"
+}

+ 9 - 0
routers/commentsRouter.go

@@ -7756,6 +7756,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers:SysUserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers:SysUserAuthController"],
+        beego.ControllerComments{
+            Method: "Logout",
+            Router: `/logout`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers:SysUserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers:SysUserAuthController"],
         beego.ControllerComments{
             Method: "ModifyPwd",

+ 73 - 0
services/user_login.go

@@ -220,6 +220,10 @@ func ThirdLogin(req map[string]interface{}) (data GetCrmTokenData, err error, er
 // @return tokenResp GetCrmTokenData
 // @return err error
 func ThirdCodeLoginFromMiddleServer(param map[string]interface{}) (tokenResp GetCrmTokenData, err error) {
+	if utils.EtaBridgeLoginUrl == "" {
+		err = errors.New("未配置第三方登录的桥接服务地址")
+		return
+	}
 	data, e := json.Marshal(param)
 	if e != nil {
 		err = fmt.Errorf("data json marshal err: %s", e.Error())
@@ -273,3 +277,72 @@ func ThirdCodeLoginFromMiddleServer(param map[string]interface{}) (tokenResp Get
 	tokenResp = result.Data
 	return
 }
+
+// ThirdLogout
+// @Description: 第三方登出
+// @author: Roc
+// @datetime 2024-01-30 16:09:18
+// @param req map[string]interface{}
+// @return data GetCrmTokenData
+// @return err error
+func ThirdLogout(accessToken string) (err error) {
+	if utils.EtaBridgeLogoutUrl == "" {
+		// 未配置第三方登出的桥接服务地址
+		return
+	}
+	params := map[string]interface{}{
+		"access_token": accessToken,
+	}
+	data, e := json.Marshal(params)
+	if e != nil {
+		err = fmt.Errorf("data json marshal err: %s", e.Error())
+		return
+	}
+
+	body := io.NopCloser(strings.NewReader(string(data)))
+	client := &http.Client{}
+	req, e := http.NewRequest("POST", utils.EtaBridgeLogoutUrl, body)
+	if e != nil {
+		err = fmt.Errorf("http create request err: %s", e.Error())
+		return
+	}
+
+	contentType := "application/json;charset=utf-8"
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("Authorization", utils.CrmEtaAuthorization)
+	resp, e := client.Do(req)
+	if e != nil {
+		err = fmt.Errorf("http client do err: %s", e.Error())
+		return
+	}
+	defer func() {
+		_ = resp.Body.Close()
+	}()
+	b, e := io.ReadAll(resp.Body)
+	if e != nil {
+		err = fmt.Errorf("resp body read err: %s", e.Error())
+		return
+	}
+	if len(b) == 0 {
+		err = fmt.Errorf("resp body is empty")
+		return
+	}
+	// 生产环境解密, 注意有个坑前后的双引号
+	if utils.RunMode == "release" {
+		str := string(b)
+		str = strings.Trim(str, `"`)
+		b = utils.DesBase64Decrypt([]byte(str), utils.DesKey)
+	}
+
+	result := new(GetCrmTokenDataResp)
+	if e = json.Unmarshal(b, &result); e != nil {
+		err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
+		return
+	}
+	if result.Code != 200 {
+		err = fmt.Errorf("result: %s", string(b))
+		return
+	}
+
+	return
+}

+ 2 - 0
utils/config.go

@@ -89,6 +89,7 @@ var (
 	EtaBridgeMd5Key    string // 桥接服务Md5密钥-鉴权用
 	EtaBridgeDesKey    string // 桥接服务Des密钥-解密数据用
 	EtaBridgeLoginUrl  string // 第三方登录鉴权接口地址
+	EtaBridgeLogoutUrl string // 第三方登出接口地址
 )
 
 // 微信配置信息
@@ -352,6 +353,7 @@ func init() {
 		EtaBridgeMd5Key = config["eta_bridge_md5_key"]        // 桥接服务Md5密钥-鉴权用
 		EtaBridgeDesKey = config["eta_bridge_des_key"]        // 桥接服务Des密钥-解密数据用
 		EtaBridgeLoginUrl = config["eta_bridge_login_url"]    // eta桥接服务-登录接口地址
+		EtaBridgeLogoutUrl = config["eta_bridge_logout_url"]  // eta桥接服务-登出接口地址
 	}
 
 	//日志配置