Skip to content

jeremypanjaitan/go-gin-jwt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Description

This project demonstrate how to create api and secure it with jwt token. The project also has capability of caching mechanism using redis. I've implemented clean architecture in this project that contains 4 layers namely repository, usecase, delivery and entity. If you are interested to the architecture that i have implemented, you can refer to this article : https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

Endpoint

  • /api/auth/login(public)
  • /api/auth/logout(require token)
  • /api/user(require token)

Usecase

  • When user login, user will passing 2 required field namely username and password, actually in this project I haven't implemented sql database. This project only focus how to secure api using jwt and how the caching mechanism using redis. App will receive the username and password and compare it with the username and password that i have harcoded in the code. If the credential is matched, then app will generate token and store the user uuid generated by app to redis.
  • When user access private endpoint, user must provide Authorization header. App will validate that token. Before validating the token, the app will check whether that token is owned by logged user by checking the user uuid is exist or not in redis. So there is no way we can use token from logged out user
  • When user logout, app will remove user uuid from redis.

How to run this project ?

You need to provide .env file that has these variable

APP_NAME=
JWT_SIGNATURE_KEY=
REDIS_HOST=
REDIS_PORT=
API_HOST=
API_PORT=

Download project dependencies

go mod tidy

run the project

go run .

Requirements

  • Redis version >= 5.0.7
  • Go version >= go1.17.3

About

Secure web api using jwt token and caching mechanism

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages