func Login(c *fiber.Ctx) error {
........
var user = models.User{
Email: data["email"],
Password: data["password"],
}
token := utils.GenerateNewAccessToken(string(user.ID))
// return response
return utils.SuccessJSON(c, fiber.StatusOK, "OK!", models.LoginResult{
UserInfo: user,
Token: token,
})
}
package utils
func GenerateNewAccessToken(userId string) string {
secret := os.Getenv("JWT_SECRET_KEY")
minutesCount, _ := strconv.Atoi(os.Getenv("JWT_SECRET_KEY_EXPIRE_MINUTES_COUNT"))
token := jwt.New(jwt.SigningMethodHS256)
claims := token.Claims.(jwt.MapClaims)
claims["sub"] = userId // here just set id of user
claims["exp"] = time.Now().Add(time.Minute * time.Duration(minutesCount)).Unix()
t, _ := token.SignedString([]byte(secret))
return t
}
func GetUserID(c *fiber.Ctx) string {
user := c.Locals("jwt").(*jwt.Token)
claims := user.Claims.(jwt.MapClaims)
id := claims["sub"].(string)
return id
}
func JWTProtected() func(*fiber.Ctx) error {
config := jwtMiddleware.Config{
SigningKey: []byte(os.Getenv("JWT_SECRET_KEY")),
ContextKey: "jwt", // used in private routes
ErrorHandler: jwtError,
}
return jwtMiddleware.New(config)
}
func jwtError(c *fiber.Ctx, err error) error {
if err.Error() == "Missing or malformed JWT" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"message": "Authorization"})
}
}
auth := api.Group("/api/user")
auth.Get("/", middlewares.JWTProtected(), userControllers.UserInfo)
func UserInfo(c *fiber.Ctx) error {
var user models.User
database.DB.Where("id = ?", utils.GetUserID).First(&user)
return utils.SuccessJSON(c, fiber.StatusOK, "user info!", user)
}
When I visit the route of user info with putting the token in the header I got this error in the terminal:
.../ProfileController.go:13 cannot convert 0x1567ea0 to Int8
[6.251ms] [rows:0] SELECT * FROM "users" WHERE id = '0x1567ea0' ORDER BY "users"."id" LIMIT 1