session

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2025 License: Apache-2.0 Imports: 8 Imported by: 8

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
	// 过期时间。毫秒数
	Expiration int64
}

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 {

	// 当 token 的有效时间少于这个值的时候,就会刷新一下 token
	Threshold time.Duration
	// 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)

	// Destroy 销毁 Session,一般用在退出登录这种地方
	Destroy(ctx *gctx.Context) error

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

	// RenewAccessToken 刷新并且返回一个新的 access token
	// 注意,必须是之前的 AccessToken 快要过期但是还没过期的时候
	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)

type TokenCarrier

type TokenCarrier interface {
	Inject(ctx *gctx.Context, value string)
	Extract(ctx *gctx.Context) string
	Clear(ctx *gctx.Context)
}

TokenCarrier 用于决定是使用 Header 还是使用 Cookie 来作为

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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