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

Fiber

Fiber

Pacote Programador Fullstack

Pacote Programador Fullstack

Redes Sociais:

facebook              

 

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

PIX Nubank

PIX Nubank


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.

Ficamos por aqui e nos vemos na próxima 😉 \o/

Até lá!

Código da aula: Github

Voltar para página principal do blog

Todas as aulas desse curso

Aula 10                                               Aula 12

Redes Sociais:

facebook          

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>