Saving OAuth2 pointer in sessions
rhaidiz opened this issue · 1 comments
rhaidiz commented
Describe the problem you're having
I'm trying to save a pointer into a session, specifically a OAuth2 configuration, but I'm having some issue.
Versions
go version go1.18.1 darwin/amd64
Code!
The following piece of code should reproduce the issue.
When I go to /puthandler
I can see that myConf
is stored in the session, but when I go to /gethandler
it is nil
.
I feel like I'm missing something very basic here but for the love of me I cannot figure it out.
package main
import (
"encoding/gob"
"fmt"
"log"
"net/http"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
)
var store = sessions.NewCookieStore([]byte("key"))
type Project struct {
ID string
conf *oauth2.Config
}
func PutHandler(w http.ResponseWriter, r *http.Request) {
sess, err := store.Get(r, "test_sess")
if err != nil {
http.Error(w, err.Error(), 500)
return
}
myConf := &oauth2.Config{
ClientID: "YOUR_CLIENT_ID",
ClientSecret: "YOUR_CLIENT_SECRET",
Scopes: []string{"SCOPE1", "SCOPE2"},
Endpoint: oauth2.Endpoint{
AuthURL: "https://provider.com/o/oauth2/auth",
TokenURL: "https://provider.com/o/oauth2/token",
},
}
project := Project{ID: "8138ahd913", conf: myConf}
sess.Values["proj"] = project
err = sess.Save(r, w)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
fmt.Fprintf(w, "%#v", sess.Values)
}
func GetHandler(w http.ResponseWriter, r *http.Request) {
sess, err := store.Get(r, "test_sess")
if err != nil {
http.Error(w, err.Error(), 500)
return
}
fmt.Fprintf(w, "%#v", sess.Values)
}
func main() {
gob.Register(Project{})
http.HandleFunc("/puthandler", PutHandler)
http.HandleFunc("/gethandler", GetHandler)
log.Fatal(http.ListenAndServe(":8000", nil))
}
rhaidiz commented
I'm an idiot.
Variable conf
in struct Project
is not exported and therefore cannot be serialized.
Forget I asked 😄