JWT Updated and ask for advice

60 views
Skip to first unread message

Gerardo Bustani

unread,
Oct 12, 2022, 12:05:27 PM10/12/22
to golang-nuts
Hi good afternoon golang dev's, I'm starting in golang blogs and I don't where to post this kind of questions,

Learning fiber framework and JWT Auth I'm getting in the register Func and Login Func the user Id is saving correctly on DB. The cookie and JWT are getting correctly and disply the cookie and preseve on the frontEnd, but when I want to get the login UserId on Controller I got 0 did some one know's what is happening?

I leave the code hopping have some orientation. 

Jwt has been updated and I’m confuse.

```
// Midleware: 
const SecretKey = "secret"
func IsAuthenticated(c *fiber.Ctx) error {

cookie := c.Cookies("jwt")
token, err := jwt.ParseWithClaims(cookie, &jwt.RegisteredClaims{}, func(token *jwt.Token) 
   (interface{}, error) {
    return []byte(SecretKey), nil
})

if err != nil || !token.Valid {

    c.Status(fiber.StatusUnauthorized)

    return c.JSON(fiber.Map{

        "message": "unauthenticated",
    })
}

 return c.Next()
}

func GetUserId(c *fiber.Ctx) (uint, error) {

 cookie := c.Cookies("jwt")

 log.Println("Cookie .........: ", cookie)

 token, err := jwt.ParseWithClaims(cookie, &jwt.RegisteredClaims{}, func(token *jwt.Token) 

 (interface{}, error) {

    return []byte(SecretKey), nil

 })
log.Println("Token .........: ", token)

log.Println("Error .........: ", err)

if err != nil {

    return 0, err

}
// var user dto.User
// expireTime := time.Now().Add(24 * time.Hour)
// payloads := jwt.RegisteredClaims{
//  Subject:   strconv.Itoa(int(user.Id)),
//  ExpiresAt: &jwt.NumericDate{Time: expireTime},
// }

payload := token.Claims.(*jwt.RegisteredClaims)

id, _ := strconv.Atoi(payload.Subject)

return uint(id), nil
}

func GenerateJWT(id uint) (string, error) {
 expireTime := time.Now().Add(24 * time.Hour)
 var user dto.User
 token, err := jwt.NewWithClaims(jwt.SigningMethodHS256, 
 jwt.RegisteredClaims{
    Subject:   strconv.Itoa(int(user.Id)),
    ExpiresAt: &jwt.NumericDate{Time: expireTime},
 }).SignedString([]byte(SecretKey))
 if err != nil {
    log.Println(err)
 }
 return token, err
 }
 //Controller:
 func User(c *fiber.Ctx) error {
  var user dto.User
  id, err := middlewares.GetUserId(c)
  log.Println(id)
  if err != nil {
    return err
  }
  confmysql.DB.Where("id = ?", id).First(&user)
  return c.JSON(user)
}
Reply all
Reply to author
Forward
0 new messages