Skip to content

Latest commit

 

History

History
78 lines (55 loc) · 1.8 KB

README.md

File metadata and controls

78 lines (55 loc) · 1.8 KB

mgosessions

A golang mgo. (Mongodb) session store for Martini.

Since Martini uses Gorilla this store extends Gorilla to create a sessions store using Mongo.

The code is pretty much unmodified from the original Gorilla code on another project but it was not packaged up so I packaged it up for martini.

##Usage

//You can pass a mongo connection string. This example is connecting to 3 servers
var params = map[string]string{
  "secret":  "biglongsecrettext",
  "mdb":    "databasename",
  "muri":   "mongodb://user:[email protected]:123,ovdb1-server-mongo-1.mgoserver.net:234,ovdb1-server-mongo-2.mgoserver.net:567"
}

//I'm using a global to store the session database but you don't need to
var DBSESS *mgo.Session

func init() {

  //middleware

  //db handler
  m.Use(DB())

  //sessions
  store := mgosessions.NewMongoStore(DBSESS.DB(params["mdb"]).C("sessions"), []byte(params["secret"]))
  m.Use(sessions.Sessions("sessionid", store))
  
  //do a test
  //testSessionFlashes(t, store)

}

//
// MongoDb middleware -  Returns a martini.Handler
//
func DB() martini.Handler {
	//
	//global mongo database connection - used for sessions as well
	//
	var err error
	DBSESS, err = mgo.Dial(params["muri"])
	if err != nil {
		//panic(err)
		fmt.Println("MGO Dial: ", err)

	}

	return func(c martini.Context) {
		s := DBSESS.Clone()
		c.Map(s.DB(params["mdb"]))
		defer s.Close()
		c.Next()
	}
}

##In a function

db would be the database sess would be the mgo sessions store

func PostAuth(req *http.Request, w http.ResponseWriter, db *mgo.Database, sess sessions.Session) (int, []byte) {

  set := session.Set("hello")
  get := session.Get("hello")
}