sessions icon indicating copy to clipboard operation
sessions copied to clipboard

securecookie: error - caused by: gob: name not registered for interface: "map[string]map[int]string"

Open aroldan00 opened this issue 3 years ago • 1 comments

Problem

Hi! I was trying to run my code, but it appears this error: securecookie: error - caused by: gob: name not registered for interface: "map[string]map[int]string" I've already tried to register the interface with: gob.Register(map[string](map[int]string){}) But I don't know if it's correct

Versions

Go version: go version go1.18.1 linux/amd64

Code

Here is the part of the code that fails:

var proy_inst map[string](map[int]string)
proy_inst = make(map[string](map[int]string))
for ID_Proyecto, Name_Proyecto := range modelo.GetProyectos_de_Usuario(user.ID) {
  proy_inst[Name_Proyecto] = make(map[int]string)
  if (proy == modelo.Proyecto{}) {
    proy = modelo.GetProyecto_ID(ID_Proyecto)
  }
  for ID_Instalacion, Name_Instalacion := range modelo.GetInstalaciones_Proyecto(ID_Proyecto) {
    proy_inst[Name_Proyecto][ID_Instalacion] = Name_Instalacion
  }
}

gob.Register(map[string](map[int]string){})
session.Values["menu"] = proy_inst
session.Values["section"] = "proyecto"
err = session.Save(r, w)
checkErr(err)

Thanks!

aroldan00 avatar Oct 17 '22 15:10 aroldan00

Kinda late here, but you have to give your custom type name like so:

type CustomType map[string]map[int]string

Then you can register it:

gob.Register(CustomType{})

Applying it to your snippet would look something like this:

type ProyInst map[string]map[int]string
proy_inst = make(ProyInst)
for ID_Proyecto, Name_Proyecto := range modelo.GetProyectos_de_Usuario(user.ID) {
  proy_inst[Name_Proyecto] = make(map[int]string)
  if (proy == modelo.Proyecto{}) {
    proy = modelo.GetProyecto_ID(ID_Proyecto)
  }
  for ID_Instalacion, Name_Instalacion := range modelo.GetInstalaciones_Proyecto(ID_Proyecto) {
    proy_inst[Name_Proyecto][ID_Instalacion] = Name_Instalacion
  }
}

gob.Register(ProyInst{})
session.Values["menu"] = proy_inst
session.Values["section"] = "proyecto"
err = session.Save(r, w)
checkErr(err)

masonictemple4 avatar Aug 13 '23 10:08 masonictemple4

@aroldan00 I am unable to reproduce the issue. I've written a sample code by taking cues from your code snippet. Here's how I have registered a type into gob:

var store = sessions.NewCookieStore([]byte("random"))

func main() {
	gob.Register(map[string](map[int]string){})
	http.HandleFunc("/hello", MyHandler)
	http.ListenAndServe(":8090", nil)
}

func MyHandler(w http.ResponseWriter, r *http.Request) {
	session, _ := store.Get(r, "session-name")
	var proy_inst map[string](map[int]string)
	proy_inst = make(map[string](map[int]string))
	proy_inst["hello"] = map[int]string{
		1: "1",
	}
	session.Values["menu"] = proy_inst
	session.Values["section"] = "proyecto"
	err := session.Save(r, w)
	if err != nil {
		fmt.Println(err)
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	fmt.Println(session.Values)
}

Output:

map[menu:map[hello:map[1:1]] section:proyecto]

bharat-rajani avatar Apr 18 '24 20:04 bharat-rajani

This issue has been open for awhile and it seems like a help requests rather than a bug or feature request, so I'm going to close it out.

jaitaiwan avatar Apr 22 '24 09:04 jaitaiwan