golang go-endpoints Session 使用 gorilla-toolkit
golang go-endpoints Session using gorilla-toolkit
我正在尝试实现会话处理并将其与 go-endpoints 包结合!
我用来处理会话的包是 Gorilla Sessions (github.com/gorilla/sessions),我需要一些帮助..
我能够将 cookie 存储到客户端..当我调用端点时可以看到 cookie 已发送到服务器。
当我在调用 api 时尝试从会话存储中获取会话值时出现问题,我无法将其扔到 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 很陌生(~年)..
我想写一些关于我发现的东西以及如何保护我的 api 的东西。
第一步是按照 go-endpoints 包说明如何注册和发现 api 的地址:https://github.com/GoogleCloudPlatform/go-endpoints,这个包是最接近的包google 应用引擎端点使用 Java 或 Python ..
现在,假设 api 在线并且可以被发现。
如果我们不使用 oauth2 来保护 api 的安全,它们将是可发现的并授予所有用户访问权限.. 我只想在我的 public api 中批准而不是在我的私人..所以我尝试了大猩猩 session 认为它会解决我的问题..
我所做的是尝试通过使用中间件包装所有传递“/_ah/api/....”的路由调用来收听传入的 api 调用,你能想象 ..我花了很长时间才明白这条路是为 google api 保留的,我可以做我想做的事..最终..我明白了..以后再打...
soo 说到点子上,在公开了 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
}
ok .. hope i made some things clear !
我正在尝试实现会话处理并将其与 go-endpoints 包结合!
我用来处理会话的包是 Gorilla Sessions (github.com/gorilla/sessions),我需要一些帮助..
我能够将 cookie 存储到客户端..当我调用端点时可以看到 cookie 已发送到服务器。
当我在调用 api 时尝试从会话存储中获取会话值时出现问题,我无法将其扔到 cookie 中。它接缝端点包剥离了 http.Request 来自额外的内容或其他东西.. ?
我尝试获取 cookie 的地方在
的 Server.gofunc (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 很陌生(~年)..
我想写一些关于我发现的东西以及如何保护我的 api 的东西。
第一步是按照 go-endpoints 包说明如何注册和发现 api 的地址:https://github.com/GoogleCloudPlatform/go-endpoints,这个包是最接近的包google 应用引擎端点使用 Java 或 Python ..
现在,假设 api 在线并且可以被发现。 如果我们不使用 oauth2 来保护 api 的安全,它们将是可发现的并授予所有用户访问权限.. 我只想在我的 public api 中批准而不是在我的私人..所以我尝试了大猩猩 session 认为它会解决我的问题..
我所做的是尝试通过使用中间件包装所有传递“/_ah/api/....”的路由调用来收听传入的 api 调用,你能想象 ..我花了很长时间才明白这条路是为 google api 保留的,我可以做我想做的事..最终..我明白了..以后再打...
soo 说到点子上,在公开了 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
}
ok .. hope i made some things clear !