jwt

package module
v1.4.0 Latest Latest
Warning

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

Go to latest
Published: Jan 8, 2023 License: MIT Imports: 8 Imported by: 0

README

elton-jwt

Build Status

JWT middleware for elton.

package main

import (
	"bytes"
	"encoding/json"
	"net/http"
	"time"

	"github.com/vicanso/elton"
	jwt "github.com/vicanso/elton-jwt"
)

func main() {
	e := elton.New()
	jwtCookie := "jwt"

	ttlToken := &jwt.TTLToken{
		TTL: 24 * time.Hour,
		// 密钥用于加密数据,需保密
		Secret: []byte("my secret"),
	}

	// Passthrough为false,会校验token是否正确
	jwtNormal := jwt.NewJWT(jwt.Config{
		CookieName: jwtCookie,
		TTLToken:   ttlToken,
	})
	// 用于初始化创建token使用(此时可能token还没有或者已过期)
	jwtPassthrough := jwt.NewJWT(jwt.Config{
		CookieName:  jwtCookie,
		TTLToken:    ttlToken,
		Passthrough: true,
	})

	e.GET("/login", jwtPassthrough, func(c *elton.Context) (err error) {
		// 模拟登录成功后获取用户信息
		c.Set(jwt.DefaultKey, `{"account":"tree.xie"}`)
		c.BodyBuffer = bytes.NewBufferString(`{"account":"tree.xie"}`)
		return
	})

	e.GET("/", jwtNormal, func(c *elton.Context) (err error) {
		// 获取相应的用户信息
		userInfo := c.GetString(jwt.DefaultKey)
		c.BodyBuffer = bytes.NewBufferString(userInfo)
		return
	})
	err := e.ListenAndServe(":3000")
	if err != nil {
		panic(err)
	}
}

Documentation

Overview

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Index

Constants

View Source
const (
	// DefaultKey default key for data
	DefaultKey = "_jwtData"
)
View Source
const HeaderJWTKey = "X-JWT"

Variables

View Source
var (
	// ErrTokenNotFound err token not found
	ErrTokenNotFound = &hes.Error{
		Message:    "Token not found",
		StatusCode: http.StatusUnauthorized,
	}
	// ErrTokenIsInvalid err token is invalid
	ErrTokenIsInvalid = &hes.Error{
		Message:    "Token is invalid",
		StatusCode: http.StatusUnauthorized,
	}
)

Functions

func NewJWT

func NewJWT(config Config) elton.Handler

NewJWT new jwt middleware

Types

type Config

type Config struct {
	Key string
	// CookieName cookie for token
	CookieName string
	Skipper    elton.Skipper
	// Passthrough passthrough when token not found
	Passthrough bool
	TTLToken    *TTLToken
	// Cookie cookie template
	Cookie http.Cookie
}

Config jwt config

type TTLToken

type TTLToken struct {
	TTL    time.Duration
	Secret []byte
}

TTLToken normal token

func (*TTLToken) Decode

func (t *TTLToken) Decode(tokenString string) (data string, err error)

Decode ttl token decode

func (*TTLToken) Encode

func (t *TTLToken) Encode(data string) (tokenString string, err error)

Encode ttl token encode

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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