session

package
v0.0.0-...-53f744f Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2024 License: Apache-2.0 Imports: 7 Imported by: 1

Documentation

Index

Constants

View Source
const CtxSessionKey = "_session"

Variables

This section is empty.

Functions

func CheckLoginMiddleware

func CheckLoginMiddleware() gin.HandlerFunc

func RenewAccessToken

func RenewAccessToken(ctx *gctx.Context) error

func SetDefaultProvider

func SetDefaultProvider(sp Provider)

func UpdateClaims

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

Types

type Builder

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

Builder 是一个辅助接口,便于构造 Session

func NewSessionBuilder

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

NewSessionBuilder 创建一个 Builder 用于构造 Session 默认使用 defaultProvider

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) ekit.AnyValue

type MemorySession

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

MemorySession 一般用于测试

func NewMemorySession

func NewMemorySession(cl Claims) *MemorySession

func (*MemorySession) Claims

func (m *MemorySession) Claims() Claims

func (*MemorySession) Del

func (m *MemorySession) Del(ctx context.Context, key string) error

func (*MemorySession) Destroy

func (m *MemorySession) Destroy(ctx context.Context) error

func (*MemorySession) Get

func (m *MemorySession) Get(ctx context.Context, key string) ekit.AnyValue

func (*MemorySession) Set

func (m *MemorySession) Set(ctx context.Context, key string, val any) error

func (*MemorySession) UpdateClaims

func (m *MemorySession) UpdateClaims(ctx *gctx.Context, claims Claims) error

type MiddlewareBuilder

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

MiddlewareBuilder 登录校验

func (*MiddlewareBuilder) Build

func (b *MiddlewareBuilder) Build() gin.HandlerFunc

type Provider

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

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

	// RenewAccessToken 刷新并且返回一个新的 access token
	// 这个过程会校验长 token 的合法性
	RenewAccessToken(ctx *gctx.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) ekit.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 *gctx.Context) (Session, error)

Get 参考 defaultProvider.Get 的说明

func NewSession

func NewSession(ctx *gctx.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