package utils import ( "app/database" "app/models" "fmt" "net/http" "os" "time" "github.com/golang-jwt/jwt/v5" "github.com/joho/godotenv" "github.com/labstack/echo/v4" ) func GenerateToken(c echo.Context, user models.User) (string, error) { err := godotenv.Load("./config/.env") if err != nil { return "", err } secret := os.Getenv("SECRET") db := database.Db() isExists, err := CheckUserByID(user.User_id) if err != nil { return "", err } fmt.Println(isExists) var jwtRecord models.Jwt if !isExists { jwtRecord.User_id = user.User_id err := db.Create(&jwtRecord).Error if err != nil { return "", err } } else { if err = db.Where("user_id = ? ", user.User_id).First(&jwtRecord).Error; err != nil { return "", err } } var tempJwt models.Jwt if err = db.Where("user_id = ?", jwtRecord.User_id).First(&tempJwt).Error; err != nil { return "", err } claims := &models.JwtClaims{ Jwt_id: tempJwt.Jwt_id, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * 168)), }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) sToken, err := token.SignedString([]byte(secret)) if err != nil { return "", err } coockie := new(http.Cookie) coockie.Name = "authorization" coockie.Value = sToken // coockie.HttpOnly = true // coockie.Secure = true coockie.Expires = time.Now().Add(time.Hour * 24) c.SetCookie(coockie) return sToken, nil }