温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用gitignore中间件避免网络请求携带登录信息

发布时间:2022-06-22 13:38:10 来源:亿速云 阅读:110 作者:iii 栏目:开发技术

本文小编为大家详细介绍“怎么用gitignore中间件避免网络请求携带登录信息”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用gitignore中间件避免网络请求携带登录信息”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    协同开发时本地测试

    昨天的文章中提到了Go如何优雅的进行本地测试,今天分享一下:在多人协同开发中,如果大家都进行本地测试可能会出现的问题。

    最大的问题就是git合并的问题,大家都改这个test文件,就会导致有冲突。

    我们可以通过把test文件加到.gitignore中来解决这个问题。

    比如,我的测试文件所在目录是:app/system/script/test.go。 我就在.gitignore中添加:

    app/system/script/test.go

    这样我们就不用浪费时间在解决git冲突上了。

    GoFrame如何优雅的获得方法名

    今天又发现一个优雅的记录错误日志的神器:runtime.Caller(0)

    我们可以通过这个命令动态获取对应的方法,从而灵活的记录错误日志,方便跟踪定位问题。

    示例如下:

    shared.ApiLog()中第三个参数就是动态获取的方法名。

    //上下架
    func (s *goodsService) Shelves(req *goods_unify.DoShelvesReq, r *ghttp.Request) (err error) {
       defer func() {
          if err != nil {
             funcName, _, _, _ := runtime.Caller(0)
             shared.ApiLog(r, "error/client_server_goods", runtime.FuncForPC(funcName).Name(), err.Error())
          }
       }()
       err = service.GoodsUnify.DoShelves(r.Context(), req)
       if err != nil {
          return
       }
       return
    }

    巧用中间件

    比如在登录之后将登录信息写到上下文中,避免每次请求都携带登录信息。

    中间件在登录之后设置关键信息到context上下文中

    package middileware
    const (
       CtxAppKey         = "AK"
       CtxAppID          = "app_id"
       CtxChannel        = "channel_id"
    )
    var Middleware = middlewareShared{}
    type middlewareShared struct {
    }
    func (s *middlewareShared) Sign(r *ghttp.Request) {
       code = checkSignV2(r)
       r.Middleware.Next()
    }
    func checkSignV2(r *ghttp.Request) (code tools.Code) {
       code, appKey, applicationInfo, sign, parmas := getSignv2Params(r)
       if 1 != code.Code {
          return
       }
       bodyBytes, err := ioutil.ReadAll(r.Request.Body)
       if nil != err {
          code = code.UnKnow()
          return
       }
       r.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // 关键点
       signRight, signParam := createSignV2(applicationInfo.Data.SecretKey, parmas, string(bodyBytes))
       if signRight != sign {
          code = code.SignErr("算法错误")
          return
       }
       r.SetParam("appKey", appKey)
       r.SetParam("appId", applicationInfo.Data.Id)
       r.SetCtxVar(CtxAppID, applicationInfo.Data.Id)
       r.SetCtxVar(CtxChannel, applicationInfo.Data.ChannelId)
       return
    }

    业务逻辑直接通过context直接取值

    通过r.Context().Value()获取数据:

    //校验请求方权限
    func checkLevel(r *ghttp.Request) (err error) {
       if gconv.Int(r.Context().Value(middileware.CtxChannel)) !=10 {
          err = errors.New("没有权限")
          return
       }
       return
    }

    读到这里,这篇“怎么用gitignore中间件避免网络请求携带登录信息”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI