security

package
v0.1.10 Latest Latest
Warning

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

Go to latest
Published: Jun 16, 2024 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

View Source
const CtxSessionKey = "_session"

Variables

This section is empty.

Functions

func CheckLoginMiddleware

func CheckLoginMiddleware() mist.Middleware

func RenewAccessToken

func RenewAccessToken(ctx *mist.Context) error

func SetDefaultProvider

func SetDefaultProvider(sp Provider)

func UpdateClaims

func UpdateClaims(ctx *mist.Context, claims Claims) error

Types

type Builder

type Builder struct {
	// contains filtered or unexported fields
}

func NewSessionBuilder

func NewSessionBuilder(ctx *mist.Context, uid int64) *Builder

func (*Builder) Build

func (b *Builder) Build() (Session, error)

func (*Builder) SetJwtData

func (b *Builder) SetJwtData(data map[string]string) *Builder

func (*Builder) SetProvider

func (b *Builder) SetProvider(p Provider) *Builder

func (*Builder) SetSessData

func (b *Builder) SetSessData(data map[string]any) *Builder

type Claims

type Claims struct {
	Uid  int64
	SSID string
	Data map[string]string
}

func (Claims) Get

func (c Claims) Get(key string) mist.AnyValue

type MiddlewareBuilder

type MiddlewareBuilder struct {
	// contains filtered or unexported fields
}

func (*MiddlewareBuilder) Build

func (b *MiddlewareBuilder) Build() mist.Middleware

type Provider

type Provider interface {
	// NewSession 将会初始化 Session
	// 其中 jwtData 将编码进去 jwt 中
	// sessData 将被放进去 Session 中
	NewSession(ctx *mist.Context, uid int64, jwtData map[string]string,
		sessData map[string]any) (Session, error)
	// Get 尝试拿到 Session,如果没有,返回 error
	// Get 必须校验 Session 的合法性。
	// 也就是,用户可以预期拿到的 Session 永远是没有过期,直接可用的
	Get(ctx *mist.Context) (Session, error)

	// UpdateClaims 修改 claims 的数据
	// 但是因为 jwt 本身是不可变的,所以实际上这里是重新生成了一个 jwt 的 token
	// 必须传入正确的 SSID
	UpdateClaims(ctx *mist.Context, claims Claims) error

	// RenewAccessToken 刷新并且返回一个新的 access token
	// 这个过程会校验长 token 的合法性
	RenewAccessToken(ctx *mist.Context) error
}

Provider 定义了 Session 的整个管理机制。 所有的 Session 都必须支持 jwt

func DefaultProvider

func DefaultProvider() Provider

type Session

type Session interface {
	// Set 将数据写入到 Session 里面
	Set(ctx context.Context, key string, val any) error
	// Get 从 Session 中获取数据,注意,这个方法不会从 JWT 里面获取数据
	Get(ctx context.Context, key string) mist.AnyValue
	// Del 删除对应的数据
	Del(ctx context.Context, key string) error
	// Destroy 销毁整个 Session
	Destroy(ctx context.Context) error
	// Claims 编码进去了 JWT 里面的数据
	Claims() Claims
}

Session 混合了 JWT 的设计。

func Get

func Get(ctx *mist.Context) (Session, error)

func NewSession

func NewSession(ctx *mist.Context, uid int64,
	jwtData map[string]string,
	sessData map[string]any) (Session, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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