jwt

package module
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Dec 12, 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 DeleteToken added in v1.0.2

func DeleteToken(jwtToken string) bool

DeleteToken add jwtToken to blacklist

func ExtractToken added in v1.0.2

func ExtractToken(c *core.Ctx) string

ExtractToken func to get JWT from header.

func GetUserByToken

func GetUserByToken(jwtToken string) *model.User

GetUserByToken returns User by JWT token

func IsBlockedToken added in v1.0.2

func IsBlockedToken(jwtToken string) (bool, error)

IsBlockedToken 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 DeleteToken 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 RefreshToken added in v1.0.2

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

RefreshToken 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