Aula 11 – Golang – Fiber – JWT
Aula 11 – Golang – Fiber – JWT
Voltar para página principal do site
Todas as aulas desse curso
Aula 10 Aula 12
Redes Sociais:
Link para a Digital Innovation
Quer aprender python3 de graça e com certificado? Acesse então:
workover
Meus link de afiliados:
Hostinger
Digital Ocean
One.com
Código da aula: Github
Melhore seu NETWORKING
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no GITHUB.
Canais do Youtube
Toti
Backing Track / Play-Along
Código Fluente
Putz!
Vocal Techniques and Exercises
PIX para doações
Aula 11 – Golang – Fiber – JWT
Agora vamos gerar um token JWT.
Mas, o que é JWT afinal?
JWT significa Json Web Token.
É um método RFC 7519 padrão da indústria para representar reivindicações com segurança entre duas partes.
Enviaremos o token JWT do frontend(Encoded) para o backend e essa string será convertida na resposta(Decoded).
Ou seja, enviaremos dados do usuário em uma string codificada(encoded).
Para usar, vamos instalar o github.com/golang-jwt/jwt/v4
Digite no terminal:
go get -u github.com/golang-jwt/jwt/v4
Vamos importar o pacote jwt no fiber-project/controllers/authController.go.
fiber-project/controllers/authController.go
package controllers
import (
"fiber-project/database"
"fiber-project/models"
"github.com/gofiber/fiber/v2"
"golang.org/x/crypto/bcrypt"
"github.com/golang-jwt/jwt/v4"
"strconv"
"time"
)
func Register(c *fiber.Ctx) error {
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
if data["password"] != data["confirm_password"] {
c.Status(400)
return c.JSON(fiber.Map{
"message": "Passwords do not match!",
})
}
password, _ := bcrypt.GenerateFromPassword([]byte(data["password"]), 14)
user := models.User{
FirstName: data["first_name"],
LastName: data["last_name"],
Email: data["email"],
Password: password,
}
database.DB.Create(&user)
return c.JSON(user)
}
func Login(c *fiber.Ctx) error {
//get the request parameter
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
//get user by email
database.DB.Where("email = ?", data["email"]).First(&user)
//user not found
if user.Id == 0 {
c.Status(404)
return c.JSON(fiber.Map{
"message": "User not found!",
})
}
//incorrect password
if err := bcrypt.CompareHashAndPassword(user.Password, []byte(data["password"])); err != nil {
c.Status(400)
return c.JSON(fiber.Map{
"message": "Incorrect password!",
})
}
claims := jwt.RegisteredClaims{
ID: strconv.Itoa(int(user.Id)),
ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
}
jwtToken := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
token, err := jwtToken.SignedString([]byte("secret"))
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
return c.JSON(fiber.Map{
"jwt": token,
})
}
Suba o servidor da aplicação e faça um teste no Postman, tente uma request no endpoint de login.
Veja que agora o retorno é do token jwt com as informações do usuário, e não as informações em texto simples.