请问grpcgo如何setcookie

发布于 2022-09-11 23:13:39 字数 15 浏览 20 评论 0

如题,求助,谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自由范儿 2022-09-18 23:13:39

grpc中间件做身份验证

风吹雪碎 2022-09-18 23:13:39

设置metadata即可,grpc metadata就是http header。

grpc具有SetHeader方法,调用grpc stream再调用transport stram设置的一个header。

// SetHeader sets the header metadata.
// When called multiple times, all the provided metadata will be merged.
// All the metadata will be sent out when one of the following happens:
//  - grpc.SendHeader() is called;
//  - The first response is sent out;
//  - An RPC status is sent out (error or success).
func SetHeader(ctx context.Context, md metadata.MD) error {
    if md.Len() == 0 {
        return nil
    }
    stream := ServerTransportStreamFromContext(ctx)
    if stream == nil {
        return status.Errorf(codes.Internal, "grpc: failed to fetch the stream from the context %v", ctx)
    }
    return stream.SetHeader(md)
}

实现增加一个cookie,增加一个header即可,演示代码如下,给ctx设置header,客户端如果需要读取cookie,要么拿metadata自己解析,要么grpc协议转换成http协议。

grpc.SetHeader(ctx, map[string][]string{
    "Set-Cookie": []string{"a=1"},
})

grpc是基于http2传输的,但是在grpc中就没有cookie这个概念。

--------- 分割线 2019年11月4日 --------

观察其他问题补充,http.Cookie对象定义了SetCookie,实现了String方法实现cookie返回的字符串,具体参考Cookie.String实现。

cookie := &http.Cookie{
    Name: "a",
    Value: "1",
}
grpc.SetHeader(ctx, map[string][]string{
    "Set-Cookie": cookie.String(),
})
囚你心 2022-09-18 23:13:39

rpc为什么需要Cookie?
你用错了吧。
Cookie是HTTP协议的一部分,RPC没有Cookie。

垂暮老矣 2022-09-18 23:13:39

参考这篇:https://stackoverflow.com/que...

但是建议 gRPC 里就不要用 Cookie 来做标识了,这东西比较适合用在前后端通讯;对于 gRPC 这种服务间通讯还是用其他方案比较好,比如 JWT。


P.S. 别告诉我你其实是 gRPC-Web?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文