method.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package user
  2. import (
  3. "errors"
  4. "fmt"
  5. "time"
  6. . "prime/basic"
  7. "github.com/golang-jwt/jwt/v4"
  8. "gorm.io/gorm"
  9. )
  10. type MyClaims struct {
  11. Username string `json:"username"`
  12. UID uint `json:"uid"`
  13. jwt.StandardClaims
  14. }
  15. const TokenExpireDuration = time.Hour * 2
  16. var MySecret = []byte("冬天冬天悄悄过去")
  17. func GenToken(username string, password string) (string, error) {
  18. db := DB()
  19. var user User
  20. result := db.Take(&user, "username = ? AND password = ?", username, password)
  21. fmt.Printf("%+v\n", user)
  22. if result.RowsAffected == 1 {
  23. c := MyClaims{username, user.ID, jwt.StandardClaims{
  24. ExpiresAt: time.Now().Add(TokenExpireDuration).Unix(),
  25. Issuer: "my-project",
  26. }}
  27. token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
  28. return token.SignedString(MySecret)
  29. }
  30. return "", gorm.ErrRecordNotFound
  31. }
  32. func ParseToken(tokenString string) (*MyClaims, error) {
  33. // 解析token
  34. token, err := jwt.ParseWithClaims(tokenString, &MyClaims{}, func(token *jwt.Token) (i interface{}, err error) {
  35. return MySecret, nil
  36. })
  37. if err != nil {
  38. return nil, err
  39. }
  40. if claims, ok := token.Claims.(*MyClaims); ok && token.Valid { // 校验token
  41. return claims, nil
  42. }
  43. return nil, errors.New("invalid token")
  44. }
  45. func SetAvatar(uid uint, filename string) error {
  46. db := DB()
  47. var user User
  48. user.ID = uid
  49. var profile Profile
  50. err := db.Model(&user).Association("Profile").Find(&profile)
  51. if err != nil {
  52. return err
  53. }
  54. profile.Avatar = filename
  55. fmt.Println(profile)
  56. res := db.Where("user_id = ?", uid).Save(&profile)
  57. // return nil
  58. return res.Error
  59. }
  60. func GetAvatar(uid uint) (string, error) {
  61. db := DB()
  62. var user User
  63. user.ID = uid
  64. var profile Profile
  65. err := db.Model(&user).Association("Profile").Find(&profile)
  66. if err != nil {
  67. return "", err
  68. }
  69. return profile.Avatar, nil
  70. }
  71. func Register(username string, password string) (user *User, err error) {
  72. db := DB()
  73. profile := Profile{Name: username, Avatar: "avatar.jpg"}
  74. user = &User{Username: username, Password: password, Profile: profile}
  75. result := db.Create(user)
  76. return user, result.Error
  77. }
  78. func GetProfile(uid uint) (*Profile, error) {
  79. db := DB()
  80. var profile Profile
  81. res := db.Find(&profile, "user_id = ?", uid)
  82. if res.RowsAffected == 1 {
  83. return &profile, nil
  84. }
  85. return nil, res.Error
  86. }
  87. func GetUID(username string) (uint, error) {
  88. db := DB()
  89. var user User
  90. res := db.Find(&user, "username = ?", username)
  91. if res.RowsAffected == 1 {
  92. return user.ID, nil
  93. }
  94. if res.Error == gorm.ErrRecordNotFound {
  95. println("user does not exist")
  96. return 0, nil
  97. }
  98. return 0, res.Error
  99. }