Golang Kratos cookie转metadata和cookie存储

本文介绍了如何在Go-Kratos框架中实现Cookie数据转换为metadata,以及在ApiService的Recommend方法中设置和管理Cookie,确保跨请求传递用户信息。
摘要由CSDN通过智能技术生成

cookie转metadata

package middleware

import (
	"context"
	"github.com/go-kratos/kratos/v2/metadata"
	"github.com/go-kratos/kratos/v2/middleware"
	"github.com/go-kratos/kratos/v2/transport"
	khttp "github.com/go-kratos/kratos/v2/transport/http"
)

func CookieToMetadataMiddleware() middleware.Middleware {
	return func(handler middleware.Handler) middleware.Handler {
		return func(ctx context.Context, req interface{}) (reply interface{}, err error) {
			tr, ok := transport.FromServerContext(ctx)
			if !ok {
				return nil, err
			}
			if tr.Kind() != transport.KindHTTP {
				return nil, err
			}
			info, ok := tr.(*khttp.Transport)
			if !ok {
				return nil, err
			}
			// http打印信息
			request := info.Request()
			rsSubCookie, _ := request.Cookie("rs_subscript")
			if rsSubCookie != nil {
				// 将 Cookie 存储到 metadata 中
				ctx = metadata.AppendToClientContext(ctx, "rs_subscript", rsSubCookie.Value)
			}

			reply, err = handler(ctx, req)
			return
		}
	}
}

cookie存储

//其他app请求链接
func (s *ApiService) Recommend(ctx *gin.Context) {
	appName := strings.Trim(ctx.Param("appName"), "/")
	if appName != "xxx" {
		//目前之和xxx合作
		ctx.JSON(http.StatusBadRequest, gin.H{"msg": "bad request"})
		return
	}
	//App安装页
	jumpUrl := fmt.Sprintf("https://apps.xxx.com/xxx?utm_source=%s&utm_campaign=plan", appName)
	cookieMaxAge := 86400 * 30 //cookie 的最大存活时间,以秒为单位
	firstDomain := ".xxx.com"
	ctx.SetCookie("cookie_temp_key", "100", cookieMaxAge, "/", firstDomain, false, true)
	//time.Sleep(time.Millisecond * 500)
	ctx.Redirect(http.StatusMovedPermanently, jumpUrl)
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值