package main import ( "context" "encoding/json" "fmt" "io" "log" "net/http" "time" "github.com/golang-jwt/jwt/v5" ) type LoginInformation struct { Email string `json:"email"` Password string `json:"password"` } type Claims struct { UserID string `json:"user_id"` jwt.RegisteredClaims } func HandleLogin(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { log.Fatal("Not post method") } if r.Body == nil { log.Fatal("No body") } body, err := io.ReadAll(r.Body) if err != nil { log.Fatal(err) } var login LoginInformation err = json.Unmarshal(body, &login) if err != nil { log.Fatal(err) } var user User err = DB.NewSelect(). Model(&user). Where("email = ? AND password = ?", login.Email, login.Password). Limit(1). Scan(context.Background()) if err != nil { log.Fatal(err) } claims := Claims{ UserID: user.UserID.String(), RegisteredClaims: jwt.RegisteredClaims{ Issuer: "latosa-escrima.fr", Subject: "authentification", ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * 24)), IssuedAt: jwt.NewNumericDate(time.Now()), }, } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) signed, err := token.SignedString([]byte("hello")) if err != nil { log.Fatal(err) } fmt.Println(signed) }