jwt

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 1, 2024 License: MIT Imports: 17 Imported by: 0

README

Module JWT

Auth APIs
POST /api/v1/auth/signin
POST /api/v1/auth/signup
DELETE /api/v1/auth/signout
PUT /api/v1/auth/refresh
Usage

Install

go get -u github.com/gflydev/modules/jwt@v1.0.0

File main.go

import (
    _ "github.com/gflydev/cache/redis"
    _ "github.com/gflydev/db/psql"
    mb "github.com/gflydev/db"	
    "github.com/gflydev/modules/jwt"
    "github.com/gflydev/modules/jwt/api"
)

File api_routes.go

// `API` Router
g.Group(prefixAPI, func(apiRouter *core.Group) {
    apiRouter.Use(jwt.New(
        prefixAPI+"/auth/signin",
        prefixAPI+"/auth/signup",
        prefixAPI+"/auth/refresh",
    ))

    /* ============================ Auth Group ===================================*/
    apiRouter.Group("/auth", func(authGroup *core.Group) {
        authGroup.POST("/signin", api.NewSignInApi())
        authGroup.DELETE("/signout", api.NewSignOutApi())
        authGroup.POST("/signup", api.NewSignUpApi())
        authGroup.PUT("/refresh", api.NewRefreshTokenApi())
    })
})
Tables

On PostgreSQL

-- -----------------------------------------------------
-- Table `users`
-- -----------------------------------------------------
CREATE TYPE user_status AS ENUM ('pending', 'active', 'blocked');

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email VARCHAR (255) NOT NULL UNIQUE,
    password VARCHAR (255) NOT NULL,
    fullname VARCHAR (255) NULL,
    phone VARCHAR(20) NULL,
    token VARCHAR (100) NULL,
    status user_status DEFAULT 'pending',
    avatar VARCHAR (255) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL,
    verified_at TIMESTAMP NULL,
    blocked_at TIMESTAMP NULL,
    deleted_at TIMESTAMP NULL,
    last_access_at TIMESTAMP NULL
);

-- Add indexes
CREATE INDEX active_users ON users (id);
CREATE UNIQUE INDEX email_users ON users (email ASC);

On MySQL

-- -----------------------------------------------------
-- Table users
-- -----------------------------------------------------
CREATE TABLE users (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR (255) NOT NULL UNIQUE,
    password VARCHAR (255) NOT NULL,
    fullname VARCHAR (255) NULL,
    phone VARCHAR(20) NULL,
    token VARCHAR (100) NULL,
    status ENUM('pending', 'active', 'blocked') NOT NULL DEFAULT 'pending',
    avatar VARCHAR (255) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL,
    verified_at TIMESTAMP NULL,
    blocked_at TIMESTAMP NULL,
    deleted_at TIMESTAMP NULL,
    last_access_at TIMESTAMP NULL
);

-- Add indexes
CREATE INDEX active_users ON users (id);
CREATE UNIQUE INDEX email_users ON users (email ASC);

Documentation

Index

Constants

View Source
const (
	// User model
	User string = "__jwt_user__"
)

Keep user ID. c.SetData(constants.UserID, claims.UserID.String())

Variables

This section is empty.

Functions

func DeleteJWTToken

func DeleteJWTToken(jwtToken string) bool

DeleteJWTToken add jwtToken to blacklist

func ExtractJWTToken

func ExtractJWTToken(c *core.Ctx) string

ExtractJWTToken func to get JWT from header.

func GetUserByToken

func GetUserByToken(jwtToken string) *model.User

GetUserByToken returns User by JWT token

func IsBlockedJWTToken

func IsBlockedJWTToken(jwtToken string) (bool, error)

IsBlockedJWTToken Check if jwtToken is locked or not

func IsValidRefreshToken

func IsValidRefreshToken(refreshToken string) bool

IsValidRefreshToken func for parse second argument from refresh token. A refresh token is valid is not expired.

func New

func New(excludes ...string) core.MiddlewareHandler

New an HTTP middleware that process login via JWT token.

Use:

app.Use(jwt.New(
	prefixAPI+"/info",
	prefixAPI+"/auth/signin",
	prefixAPI+"/auth/refresh",
))

func SignOut

func SignOut(jwtToken string) error

SignOut function takes in jwtToken string, utils.ExtractTokenMetadata extract access token metadata to get a userID which is the key that store refresh token in the Redis Caching then delete refresh token from the Redis and DeleteJWTToken will delete access token by send it to black-list (middleware will handle invalid token in blacklist).

func SignUp

func SignUp(signUp *dto.SignUp) (*model.User, error)

SignUp register new user.

Types

type TokenMetadata

type TokenMetadata struct {
	UserID      int
	Credentials core.Data
	Expires     int64
}

TokenMetadata struct to describe metadata in JWT.

func ExtractTokenMetadata

func ExtractTokenMetadata(tokenString string) (*TokenMetadata, error)

ExtractTokenMetadata func to extract metadata from JWT.

type Tokens

type Tokens struct {
	Access  string
	Refresh string
}

Tokens struct to describe tokens object.

func GenerateTokens

func GenerateTokens(id string, credentials []string) (*Tokens, error)

GenerateTokens func for generate a new Access & Refresh tokens.

func RefreshJWTToken

func RefreshJWTToken(jwtToken, refreshToken string) (*Tokens, error)

RefreshJWTToken function to refresh JWT token from user.

func SignIn

func SignIn(signIn *dto.SignIn) (*Tokens, error)

SignIn login app.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL