美文网首页
faygo框架的跨域(支持cookie)解决办法

faygo框架的跨域(支持cookie)解决办法

作者: Rocky_92d5 | 来源:发表于2017-09-26 11:16 被阅读214次

    关于跨域的说明,请参考 http://www.ruanyifeng.com/blog/2016/04/cors.html

    更新:作者已更新cross_origin.go,新的写法是:

    frame.NamedAPI("QueryMenuList","GET OPTIONS","/api/v1/webs/get/query_menu_list", webs.QueryMenuList()).Use(tgMiddleware.CrossOrigin)

    下面是基于网友畅雨的解决办法整理出来的。

    1、router路由中,需要添加OPTIONS的处理方法

    tgMiddleware "github.com/henrylee2cn/faygo/ext/middleware"

    // QueryMenuList

    frame.NamedAPI("QueryMenuList","GET","/api/v1/webs/get/query_menu_list", webs.QueryMenuList()).Use(tgMiddleware.CrossOrigin)

    frame.NamedOPTIONS("QueryMenuList","/api/v1/webs/get/query_menu_list", webs.DelwithOptions()).Use(tgMiddleware.CrossOrigin)

    2、api webs处理单元中,增加方法 DelwithOptions,对应执行OPTIONS请求的处理

    func DelwithOptions() faygo.HandlerFunc {

        return func(c *faygo.Context) error{

            return nil

        }

    }

    3、faygo自带的middleware cross_origin.go 中,需要修改成

    // CrossOrigin creates Cross-Domain middleware

    var CrossOrigin = faygo.HandlerFunc(func(ctx *faygo.Context) error {

      ctx.SetHeader(faygo.HeaderAccessControlAllowOrigin, ctx.HeaderParam(faygo.HeaderOrigin))

      ctx.SetHeader(faygo.HeaderAccessControlAllowMethods,"POST, GET, OPTIONS, PUT, DELETE")

      ctx.SetHeader(faygo.HeaderAccessControlAllowCredentials,"true")

      ctx.SetHeader(faygo.HeaderAccessControlAllowHeaders,

    "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")

      ctx.SetHeader(faygo.HeaderAccessControlMaxAge,"172800")// 加上此参数,不用每次请求都发OPTIONS

      return nil

    })

    4、前端是用react,在fetchOptions中,需要添加

    credentials:'include',

    注意:mode: 'cors'  //这个参数不用。

    建议:faygo修改下cross_origin.go,添加上面的内容。

    另外,就是对每个api的路由定义,都要加上Use(tgMiddleware.CrossOrigin)和OPTIONS的处理,�faygo框架上能否提供更简化的办法?跨域(支持cookie)应该是最基本的功能,希望能整合进框架中。

    相关文章

      网友评论

          本文标题:faygo框架的跨域(支持cookie)解决办法

          本文链接:https://www.haomeiwen.com/subject/veywkxtx.html