File tree Expand file tree Collapse file tree 7 files changed +348
-9
lines changed Expand file tree Collapse file tree 7 files changed +348
-9
lines changed Original file line number Diff line number Diff line change 1
1
coverage.out
2
2
vendor /*
3
3
! /vendor /vendor.json
4
+ /gorm /test.db
Original file line number Diff line number Diff line change @@ -13,6 +13,7 @@ Gin middleware for session management with multi-backend support:
13
13
- [ Redis] ( #redis )
14
14
- [ memcached] ( #memcached )
15
15
- [ MongoDB] ( #mongodb )
16
+ - [ GoRM] ( #gorm )
16
17
- [ memstore] ( #memstore )
17
18
- [ PostgreSQL] ( #postgresql )
18
19
@@ -322,6 +323,48 @@ func main() {
322
323
}
323
324
```
324
325
326
+ ### GoRM
327
+
328
+ [ embedmd ] :# ( _example/gorm/main.go go )
329
+ ``` go
330
+ package main
331
+
332
+ import (
333
+ " github.com/gin-contrib/sessions"
334
+ gormsessions " github.com/gin-contrib/sessions/gorm"
335
+ " github.com/gin-gonic/gin"
336
+ " gorm.io/driver/sqlite"
337
+ " gorm.io/gorm"
338
+ )
339
+
340
+ func main () {
341
+ db , err := gorm.Open (sqlite.Open (" test.db" ), &gorm.Config {})
342
+ if err != nil {
343
+ panic (err)
344
+ }
345
+ store := gormsessions.NewStore (db, true , []byte (" secret" ))
346
+
347
+ r := gin.Default ()
348
+ r.Use (sessions.Sessions (" mysession" , store))
349
+
350
+ r.GET (" /incr" , func (c *gin.Context ) {
351
+ session := sessions.Default (c)
352
+ var count int
353
+ v := session.Get (" count" )
354
+ if v == nil {
355
+ count = 0
356
+ } else {
357
+ count = v.(int )
358
+ count++
359
+ }
360
+ session.Set (" count" , count)
361
+ session.Save ()
362
+ c.JSON (200 , gin.H {" count" : count})
363
+ })
364
+ r.Run (" :8000" )
365
+ }
366
+ ```
367
+
325
368
### PostgreSQL
326
369
327
370
``` go
Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ import (
4
+ "github.com/gin-contrib/sessions"
5
+ gormsessions "github.com/gin-contrib/sessions/gorm"
6
+ "github.com/gin-gonic/gin"
7
+ "gorm.io/driver/sqlite"
8
+ "gorm.io/gorm"
9
+ )
10
+
11
+ func main () {
12
+ db , err := gorm .Open (sqlite .Open ("test.db" ), & gorm.Config {})
13
+ if err != nil {
14
+ panic (err )
15
+ }
16
+ store := gormsessions .NewStore (db , true , []byte ("secret" ))
17
+
18
+ r := gin .Default ()
19
+ r .Use (sessions .Sessions ("mysession" , store ))
20
+
21
+ r .GET ("/incr" , func (c * gin.Context ) {
22
+ session := sessions .Default (c )
23
+ var count int
24
+ v := session .Get ("count" )
25
+ if v == nil {
26
+ count = 0
27
+ } else {
28
+ count = v .(int )
29
+ count ++
30
+ }
31
+ session .Set ("count" , count )
32
+ session .Save ()
33
+ c .JSON (200 , gin.H {"count" : count })
34
+ })
35
+ r .Run (":8000" )
36
+ }
Original file line number Diff line number Diff line change @@ -11,11 +11,12 @@ require (
11
11
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
12
12
github.com/gomodule/redigo v2.0.0+incompatible
13
13
github.com/gorilla/context v1.1.1
14
- github.com/gorilla/sessions v1.2.0
14
+ github.com/gorilla/sessions v1.2.1
15
15
github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b
16
16
github.com/lib/pq v1.10.3 // indirect
17
17
github.com/memcachier/mc v2.0.1+incompatible
18
- github.com/pkg/errors v0.9.1 // indirect
19
18
github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b
20
- github.com/stretchr/testify v1.7.0 // indirect
19
+ github.com/wader/gormstore/v2 v2.0.0
20
+ gorm.io/driver/sqlite v1.1.4
21
+ gorm.io/gorm v1.20.12
21
22
)
Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change
1
+ package gorm
2
+
3
+ import (
4
+ "time"
5
+
6
+ "github.com/gin-contrib/sessions"
7
+ "github.com/wader/gormstore/v2"
8
+ "gorm.io/gorm"
9
+ )
10
+
11
+ type Store interface {
12
+ sessions.Store
13
+ }
14
+
15
+ func NewStore (d * gorm.DB , expiredSessionCleanup bool , keyPairs ... []byte ) Store {
16
+ s := gormstore .New (d , keyPairs ... )
17
+ if expiredSessionCleanup {
18
+ quit := make (chan struct {})
19
+ go s .PeriodicCleanup (1 * time .Hour , quit )
20
+ }
21
+ return & store {s }
22
+ }
23
+
24
+ type store struct {
25
+ * gormstore.Store
26
+ }
27
+
28
+ func (s * store ) Options (options sessions.Options ) {
29
+ s .Store .SessionOpts = options .ToGorillaOptions ()
30
+ }
Original file line number Diff line number Diff line change
1
+ // +build go1.13
2
+
3
+ package gorm
4
+
5
+ import (
6
+ "testing"
7
+
8
+ "github.com/gin-contrib/sessions"
9
+ "github.com/gin-contrib/sessions/tester"
10
+ "gorm.io/driver/sqlite"
11
+ "gorm.io/gorm"
12
+ )
13
+
14
+ var newStore = func (_ * testing.T ) sessions.Store {
15
+ db , err := gorm .Open (sqlite .Open ("test.db" ), & gorm.Config {})
16
+ if err != nil {
17
+ panic (err )
18
+ }
19
+ return NewStore (db , true , []byte ("secret" ))
20
+ }
21
+
22
+ func TestGorm_SessionGetSet (t * testing.T ) {
23
+ tester .GetSet (t , newStore )
24
+ }
25
+
26
+ func TestGorm_SessionDeleteKey (t * testing.T ) {
27
+ tester .DeleteKey (t , newStore )
28
+ }
29
+
30
+ func TestGorm_SessionFlashes (t * testing.T ) {
31
+ tester .Flashes (t , newStore )
32
+ }
33
+
34
+ func TestGorm_SessionClear (t * testing.T ) {
35
+ tester .Clear (t , newStore )
36
+ }
37
+
38
+ func TestGorm_SessionOptions (t * testing.T ) {
39
+ tester .Options (t , newStore )
40
+ }
41
+
42
+ func TestGorm_SessionMany (t * testing.T ) {
43
+ tester .Many (t , newStore )
44
+ }
You can’t perform that action at this time.
0 commit comments