我正在尝试实现会话处理并将其与go-endpoints包结合使用!
我用来处理会话的程序包是Gorilla Sessions(github.com/gorilla/sessions),我想要一些帮助。
我能够将cookie存储到客户端..当我调用端点时,可以看到cookie已发送到服务器。
问题是,当我尝试在调用api时从Session存储中获取Session值时,我无法扔到cookie上。它暗示了端点包从额外的内容中剥离了http.Request之类的东西。
我尝试获取Cookie的位置在Server.go的
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request){
var store = sessions.NewCookieStore([]byte("secret123"));
session, _ := store.Get(r, "session-name");
// Get the previously flashes, if any.
c.Infof("foo value is : %v",r.Cookies());
if flashes := session.Flashes(); len(flashes) > 0 {
// Just print the flash values.
c.Infof("this is the testing post message with cookie from the ServeHTTP :
%v",flashes);
}
else {
// Set a new flash.
session.AddFlash("Hello, flash messages world!")
c.Infof("No flashes found.");
}
session.Save(r, w)
}
我得到的是一个空数组.... :(
有人带头?
谢谢 !!!!!
好吧,我猜我对go-endpoints的想法是错误的..我对golang(〜year)很陌生。
我想写一些关于我发现的东西以及如何保护我的api的东西。
第一步将按照go-
endpoints软件包说明进行操作,有关如何注册和发现api的信息:https : //github.com/GoogleCloudPlatform/go-
endpoints
,此软件包是使用google
app引擎终结点使用的最接近的软件包Java或Python ..
现在,可以说该api在线且可发现。如果我们不使用oauth2来保护api的安全,那么它们将是可发现的并授予所有用户访问权限..而且我只想在我的公共api中而不是在我的私有..中批准某些内容,因此我尝试了大猩猩会话,认为它将解决我的问题
..
我所做的是通过与中间件一起包装所有传递“ / _ah / api /
....”的路由调用来监听传入的api调用,您能想象..花了我一生的时间来理解此路径保留给google api而且我可以做我想做的事..最终..我知道了。
在公开api的名称后,您应该使用info.ClientIds,info.Scopes。
代码示例---->
> const (
> dummyClientID = "google appengine client id"
> dummyScope1 = "https://www.googleapis.com/auth/plus.login"
> dummyScope2 = "https://www.googleapis.com/auth/plus.me"
> dummyScope3 = "https://www.googleapis.com/auth/userinfo.email"
> dummyScope4 = "https://www.googleapis.com/auth/userinfo.profile"
> dummyAudience = "people"
> )
>
> var (
> emptySlice = []string{}
> clientIDs = []string{dummyClientID} // this is the clientId of the
> project
> scopes = []string{dummyScope1,dummyScope2,dummyScope3,dummyScope4}
> // >this are the req oauth2 scopes that the user hase to approve.
> audiences = []string{dummyAudience} // this is only for android !
> )
>
>
> info := manageApi.MethodByName("GetBusinessById").Info()
> info.Name, info.HTTPMethod, info.Path, info.Desc = "GetBusinessById",
> >"POST","GetBusinessById", "Get the business if bid is sent."
> info.ClientIds, info.Scopes = clientIDs, scopes
现在剩下要做的就是在api函数中创建一个endpoint.NewContext,并要求适当的范围来获取user.User ..
> func (ms *ManageService) GetBusinessById(r *http.Request, req
> >*JsonInGetBusinessById, resp *JsonOutEditBusiness) error {
> // go get the business by bid.
> DalInst := ManageDataAccessLayer.DALManagerFactory()
>
> context := endpoints.NewContext(r)
>
> u,err :=
> >context.CurrentOAuthUser("https://www.googleapis.com/auth/userinfo.email")
> if err != nil {
> return err
> }else {
>
> var businessObj = DalInst.GetBusinessByBid(context, req.BidStr)
>
>
> resp.BidStr = u.Email //just for testing to see if the client is auth
> and >we can get client Email..
>
> resp.NameStr = businessObj.NameStr
> resp.AddressStr = businessObj.AddressStr
> resp.DescriptionStr = businessObj.DescriptionStr
> resp.DescriptionTwo = businessObj.DescriptionTwo
> resp.PhoneNumberStr = businessObj.PhoneNumberStr
>
> return nil
>
>
> }
好的..希望我弄清楚一些事情!
问题内容: 这个问题只是为了确认我对这个概念很清楚。 据我了解, Google Cloud Endpoints 是Google REST 服务的一种实现,因此它们无法在内存中保留任何“会话”数据,因此: 用户必须在每个请求中发送 身份验证数据 。 我以后要使用的所有数据都 必须保留 ,即,对于收到的每个API请求,我必须访问数据存储区,执行某些操作并再次存储数据。 这样对吗?如果是这样,这在性能方
问题内容: 我想使用Redis进行会话管理。 但是我不知道将Redis用作Gorilla会话程序包的自定义后端比直接使用Redis有什么好处? 链接到大猩猩会议软件包:http : //www.gorillatoolkit.org/pkg/sessions 问题答案: 大猩猩会话提供了一种连接存储系统以进行会话管理的方法,只要您遵循提供的界面即可。目前,他们为您提供了两个开箱即用的商店。其中一个是
Gorilla 是 Go 语言的 Web 工具包,包含模块如下: gorilla/context 存储全局的请求变量 gorilla/mux 是一个强大的 URL 路由器和分发器 gorilla/reverse 产生可逆的正则表达式muxes regexp的基础。 gorilla/rpc 实现 RPC over HTTP with codec for JSON-RPC. gorilla/schem
命名空间及其相关端点的完整列表: 点击跳转 >>
执行器端点允许您监视应用程序并与其交互。SpringBoot包含许多内置端点,并允许您添加自己的端点。例如,health端点提供了基本的应用程序健康信息。 可以启用或禁用每个端点。 它控制是否创建端点并且其bean存在于应用程序上下文中。 要进行远程访问,还必须通过JMX或HTTP公开端点。 大多数应用程序选择HTTP,其中端点的ID以及/actuator的前缀映射到URL。 例如,默认情况下,运
gorilla/mux 实现了一个请求路由和分发的 Go 框架。 mux 名字的意思是 "HTTP request multiplexer". 和标准包 http.ServeMux类似, mux.Router根据已注册路由列表匹配传入请求,并调用与URL或其他条件匹配的路由的处理程序。 主要特性: It implements the http.Handler interface so it is