session.go 1020 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package session
  2. import (
  3. "encoding/gob"
  4. "x-ui/database/model"
  5. "github.com/gin-contrib/sessions"
  6. "github.com/gin-gonic/gin"
  7. )
  8. const (
  9. loginUserKey = "LOGIN_USER"
  10. defaultPath = "/"
  11. )
  12. func init() {
  13. gob.Register(model.User{})
  14. }
  15. func SetLoginUser(c *gin.Context, user *model.User) {
  16. if user == nil {
  17. return
  18. }
  19. s := sessions.Default(c)
  20. s.Set(loginUserKey, *user)
  21. }
  22. func SetMaxAge(c *gin.Context, maxAge int) {
  23. s := sessions.Default(c)
  24. s.Options(sessions.Options{
  25. Path: defaultPath,
  26. MaxAge: maxAge,
  27. HttpOnly: true,
  28. })
  29. }
  30. func GetLoginUser(c *gin.Context) *model.User {
  31. s := sessions.Default(c)
  32. obj := s.Get(loginUserKey)
  33. if obj == nil {
  34. return nil
  35. }
  36. user, ok := obj.(model.User)
  37. if !ok {
  38. s.Delete(loginUserKey)
  39. return nil
  40. }
  41. return &user
  42. }
  43. func IsLogin(c *gin.Context) bool {
  44. return GetLoginUser(c) != nil
  45. }
  46. func ClearSession(c *gin.Context) {
  47. s := sessions.Default(c)
  48. s.Clear()
  49. s.Options(sessions.Options{
  50. Path: defaultPath,
  51. MaxAge: -1,
  52. HttpOnly: true,
  53. })
  54. }