drivers

package
v1.1.13 Latest Latest
Warning

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

Go to latest
Published: May 29, 2025 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProviderGitHub = "github"
	ProviderGoogle = "google"
	ProviderWeChat = "wechat"
)

社交登录提供商类型常量

Variables

This section is empty.

Functions

This section is empty.

Types

type BaseSocialProvider

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

BaseSocialProvider 是社交登录提供商的基础实现

func (*BaseSocialProvider) ExchangeToken

func (p *BaseSocialProvider) ExchangeToken(ctx context.Context, code string) (*Token, error)

ExchangeToken 使用授权码交换访问令牌

func (*BaseSocialProvider) GetAuthURL

func (p *BaseSocialProvider) GetAuthURL(state string) string

GetAuthURL 返回授权URL

func (*BaseSocialProvider) GetName

func (p *BaseSocialProvider) GetName() string

GetName 返回提供商名称

type CreateUserCallback

type CreateUserCallback func(ctx context.Context, user *SocialUser) (interface{}, error)

CreateUserCallback 是创建用户的回调函数类型

type GitHubProvider

type GitHubProvider struct {
	BaseSocialProvider
}

GitHubProvider 实现GitHub登录

func NewGitHubProvider

func NewGitHubProvider(config map[string]interface{}) *GitHubProvider

NewGitHubProvider 创建新的GitHub登录提供商

func (*GitHubProvider) GetUserInfo

func (p *GitHubProvider) GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)

GetUserInfo 从GitHub获取用户信息

type GoogleProvider

type GoogleProvider struct {
	BaseSocialProvider
}

GoogleProvider 实现Google登录

func NewGoogleProvider

func NewGoogleProvider(config map[string]interface{}) *GoogleProvider

NewGoogleProvider 创建新的Google登录提供商

func (*GoogleProvider) GetUserInfo

func (p *GoogleProvider) GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)

GetUserInfo 从Google获取用户信息

type JWTConfig

type JWTConfig struct {
	// SigningKey 签名密钥
	SigningKey []byte

	// SigningMethod 签名方法
	SigningMethod jwt.SigningMethod

	// Issuer 令牌发行者
	Issuer string

	// Audience 目标接收者
	Audience []string

	// DefaultExpiry 默认过期时间
	DefaultExpiry time.Duration

	// RefreshExpiry 刷新令牌过期时间
	RefreshExpiry time.Duration
}

JWTConfig JWT配置

func DefaultJWTConfig

func DefaultJWTConfig() JWTConfig

DefaultJWTConfig 返回默认JWT配置

type JWTProvider

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

JWTProvider 是基于JWT的认证提供者实现

func NewJWTProvider

func NewJWTProvider(userProvider auth.UserProvider, signingKey interface{}, method jwt.SigningMethod) *JWTProvider

NewJWTProvider 创建新的JWT认证提供者

func (*JWTProvider) Authenticate

func (p *JWTProvider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)

Authenticate 验证用户凭证并返回已认证用户

func (*JWTProvider) CheckPermission

func (p *JWTProvider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool

CheckPermission 检查用户是否拥有指定权限

func (*JWTProvider) CheckRole

func (p *JWTProvider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool

CheckRole 检查用户是否拥有指定角色

func (*JWTProvider) ConfigureJWT

func (p *JWTProvider) ConfigureJWT(config middleware.JWTConfig)

ConfigureJWT 配置JWT提供者

func (*JWTProvider) GenerateToken

func (p *JWTProvider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)

GenerateToken 为用户生成JWT令牌

func (*JWTProvider) GetUserByID

func (p *JWTProvider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)

GetUserByID 通过ID获取用户

func (*JWTProvider) InvalidateToken

func (p *JWTProvider) InvalidateToken(ctx context.Context, tokenString string) error

InvalidateToken 使JWT令牌失效

func (*JWTProvider) RefreshToken

func (p *JWTProvider) RefreshToken(ctx context.Context, tokenString string) (string, error)

RefreshToken 刷新JWT令牌

func (*JWTProvider) SetBlacklist

func (p *JWTProvider) SetBlacklist(blacklist TokenBlacklist)

SetBlacklist 设置令牌黑名单

func (*JWTProvider) ToMiddleware

func (p *JWTProvider) ToMiddleware() flow.HandlerFunc

ToMiddleware 将JWT提供者转换为Flow中间件

func (*JWTProvider) ValidateToken

func (p *JWTProvider) ValidateToken(ctx context.Context, tokenString string) (auth.Authenticatable, error)

ValidateToken 验证JWT令牌并返回关联的用户

type MemoryBlacklist

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

MemoryBlacklist 是基于内存的令牌黑名单实现

func NewMemoryBlacklist

func NewMemoryBlacklist() *MemoryBlacklist

NewMemoryBlacklist 创建新的内存黑名单

func (*MemoryBlacklist) Add

func (m *MemoryBlacklist) Add(token string, expiry time.Time) error

Add 将令牌添加到黑名单

func (*MemoryBlacklist) Cleanup

func (m *MemoryBlacklist) Cleanup()

Cleanup 清理已过期的令牌

func (*MemoryBlacklist) Contains

func (m *MemoryBlacklist) Contains(token string) bool

Contains 检查令牌是否在黑名单中

type MemorySessionStorage

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

MemorySessionStorage 内存会话存储实现

func NewMemorySessionStorage

func NewMemorySessionStorage() *MemorySessionStorage

NewMemorySessionStorage 创建新的内存会话存储

func (*MemorySessionStorage) Delete

func (s *MemorySessionStorage) Delete(id string) error

Delete 删除会话

func (*MemorySessionStorage) Exists

func (s *MemorySessionStorage) Exists(id string) bool

Exists 检查会话是否存在

func (*MemorySessionStorage) Get

func (s *MemorySessionStorage) Get(id string) ([]byte, error)

Get 获取会话数据

func (*MemorySessionStorage) Set

func (s *MemorySessionStorage) Set(id string, data []byte, expiry time.Duration) error

Set 设置会话数据

func (*MemorySessionStorage) Touch

func (s *MemorySessionStorage) Touch(id string, expiry time.Duration) error

Touch 刷新会话过期时间

type OAuth2Config

type OAuth2Config struct {
	// ClientID 客户端ID
	ClientID string

	// ClientSecret 客户端密钥
	ClientSecret string

	// RedirectURI 重定向URI
	RedirectURI string

	// AuthURL 授权URL
	AuthURL string

	// TokenURL 令牌URL
	TokenURL string

	// UserInfoURL 用户信息URL
	UserInfoURL string

	// Scopes 请求的作用域
	Scopes []string

	// ResponseType 响应类型,默认为"code"
	ResponseType string

	// StateParam 状态参数,用于防止CSRF攻击
	StateParam string
}

OAuth2Config OAuth2配置

type OAuth2Provider

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

OAuth2Provider OAuth2认证提供者

func NewOAuth2Provider

func NewOAuth2Provider(userProvider auth.UserProvider, config OAuth2Config) *OAuth2Provider

NewOAuth2Provider 创建新的OAuth2认证提供者

func (*OAuth2Provider) Authenticate

func (p *OAuth2Provider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)

Authenticate 验证用户凭证并返回已认证用户

func (*OAuth2Provider) AuthenticateWithCode

func (p *OAuth2Provider) AuthenticateWithCode(ctx context.Context, code string) (auth.Authenticatable, string, error)

AuthenticateWithCode 使用授权码认证

func (*OAuth2Provider) CheckPermission

func (p *OAuth2Provider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool

CheckPermission 检查用户是否拥有指定权限

func (*OAuth2Provider) CheckRole

func (p *OAuth2Provider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool

CheckRole 检查用户是否拥有指定角色

func (*OAuth2Provider) ExchangeCode

func (p *OAuth2Provider) ExchangeCode(code string) (*OAuth2Token, error)

ExchangeCode 通过授权码交换访问令牌

func (*OAuth2Provider) GenerateToken

func (p *OAuth2Provider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)

GenerateToken 为用户生成认证令牌

func (*OAuth2Provider) GetAuthURL

func (p *OAuth2Provider) GetAuthURL(state string) string

GetAuthURL 获取授权URL

func (*OAuth2Provider) GetUserByID

func (p *OAuth2Provider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)

GetUserByID 通过ID获取用户

func (*OAuth2Provider) GetUserInfo

func (p *OAuth2Provider) GetUserInfo(token *OAuth2Token) (map[string]interface{}, error)

GetUserInfo 获取用户信息

func (*OAuth2Provider) HandleCallback

func (p *OAuth2Provider) HandleCallback() flow.HandlerFunc

HandleCallback 处理OAuth2回调

func (*OAuth2Provider) InvalidateToken

func (p *OAuth2Provider) InvalidateToken(ctx context.Context, tokenString string) error

InvalidateToken 使令牌失效

func (*OAuth2Provider) RefreshToken

func (p *OAuth2Provider) RefreshToken(ctx context.Context, tokenString string) (string, error)

RefreshToken 刷新认证令牌

func (*OAuth2Provider) ValidateToken

func (p *OAuth2Provider) ValidateToken(ctx context.Context, tokenString string) (auth.Authenticatable, error)

ValidateToken 验证令牌并返回关联的用户

type OAuth2Token

type OAuth2Token struct {
	// AccessToken 访问令牌
	AccessToken string `json:"access_token"`

	// RefreshToken 刷新令牌
	RefreshToken string `json:"refresh_token"`

	// TokenType 令牌类型
	TokenType string `json:"token_type"`

	// ExpiresIn 过期时间(秒)
	ExpiresIn int64 `json:"expires_in"`

	// CreatedAt 创建时间
	CreatedAt time.Time `json:"-"`
}

OAuth2Token OAuth2令牌

func (*OAuth2Token) IsExpired

func (t *OAuth2Token) IsExpired() bool

IsExpired 检查令牌是否已过期

type SessionConfig

type SessionConfig struct {
	// CookieName 会话Cookie名称
	CookieName string

	// CookiePath Cookie路径
	CookiePath string

	// CookieDomain Cookie域
	CookieDomain string

	// CookieSecure 是否仅通过HTTPS发送
	CookieSecure bool

	// CookieHTTPOnly 是否仅可通过HTTP访问
	CookieHTTPOnly bool

	// DefaultExpiry 默认过期时间
	DefaultExpiry time.Duration

	// SameSite Cookie的SameSite属性
	SameSite http.SameSite
}

SessionConfig 会话配置

func DefaultSessionConfig

func DefaultSessionConfig() SessionConfig

DefaultSessionConfig 返回默认会话配置

type SessionProvider

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

SessionProvider 会话认证提供者

func NewSessionProvider

func NewSessionProvider(userProvider auth.UserProvider, storage SessionStorage) *SessionProvider

NewSessionProvider 创建新的会话认证提供者

func (*SessionProvider) Authenticate

func (p *SessionProvider) Authenticate(ctx context.Context, credentials map[string]string) (auth.Authenticatable, error)

Authenticate 验证用户凭证并返回已认证用户

func (*SessionProvider) CheckPermission

func (p *SessionProvider) CheckPermission(ctx context.Context, user auth.Authenticatable, permission string) bool

CheckPermission 检查用户是否拥有指定权限

func (*SessionProvider) CheckRole

func (p *SessionProvider) CheckRole(ctx context.Context, user auth.Authenticatable, role string) bool

CheckRole 检查用户是否拥有指定角色

func (*SessionProvider) ConfigureSession

func (p *SessionProvider) ConfigureSession(config SessionConfig)

ConfigureSession 配置会话提供者

func (*SessionProvider) GenerateToken

func (p *SessionProvider) GenerateToken(ctx context.Context, user auth.Authenticatable, expiry time.Duration) (string, error)

GenerateToken 为用户生成会话令牌并存储会话数据

func (*SessionProvider) GetUserByID

func (p *SessionProvider) GetUserByID(ctx context.Context, id string) (auth.Authenticatable, error)

GetUserByID 通过ID获取用户

func (*SessionProvider) InvalidateToken

func (p *SessionProvider) InvalidateToken(ctx context.Context, token string) error

InvalidateToken 使会话令牌失效

func (*SessionProvider) RefreshToken

func (p *SessionProvider) RefreshToken(ctx context.Context, token string) (string, error)

RefreshToken 刷新会话令牌

func (*SessionProvider) ToMiddleware

func (p *SessionProvider) ToMiddleware() flow.HandlerFunc

ToMiddleware 将会话提供者转换为Flow中间件

func (*SessionProvider) ValidateToken

func (p *SessionProvider) ValidateToken(ctx context.Context, token string) (auth.Authenticatable, error)

ValidateToken 验证会话令牌并返回关联的用户

type SessionStorage

type SessionStorage interface {
	// Get 获取会话数据
	Get(id string) ([]byte, error)

	// Set 设置会话数据
	Set(id string, data []byte, expiry time.Duration) error

	// Delete 删除会话
	Delete(id string) error

	// Exists 检查会话是否存在
	Exists(id string) bool

	// Touch 刷新会话过期时间
	Touch(id string, expiry time.Duration) error
}

SessionStorage 定义会话存储接口

type SocialManager

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

SocialManager 管理社交登录

func NewSocialManager

func NewSocialManager(userRepo UserRepository) *SocialManager

NewSocialManager 创建新的社交登录管理器

func (*SocialManager) HandleCallback

func (m *SocialManager) HandleCallback(providerName string) http.HandlerFunc

HandleCallback 处理回调请求

func (*SocialManager) HandleLogin

func (m *SocialManager) HandleLogin(providerName string) http.HandlerFunc

HandleLogin 处理登录请求

func (*SocialManager) RegisterProvider

func (m *SocialManager) RegisterProvider(provider SocialProvider)

RegisterProvider 注册社交登录提供商

func (*SocialManager) SetCreateUserCallback

func (m *SocialManager) SetCreateUserCallback(callback CreateUserCallback)

SetCreateUserCallback 设置创建用户的回调函数

type SocialProvider

type SocialProvider interface {
	// GetName 返回提供商名称
	GetName() string
	// GetAuthURL 返回授权URL
	GetAuthURL(state string) string
	// ExchangeToken 使用授权码交换访问令牌
	ExchangeToken(ctx context.Context, code string) (*Token, error)
	// GetUserInfo 通过访问令牌获取用户信息
	GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)
}

SocialProvider 定义了社交登录提供商接口

type SocialUser

type SocialUser struct {
	ID       string
	Name     string
	Email    string
	Avatar   string
	Provider string
	RawData  map[string]interface{}
}

SocialUser 表示从社交平台获取的用户信息

type Token

type Token struct {
	AccessToken  string
	TokenType    string
	RefreshToken string
	Expiry       time.Time
	Raw          map[string]interface{}
}

Token 表示OAuth2认证令牌

type TokenBlacklist

type TokenBlacklist interface {
	// Add 将令牌添加到黑名单
	Add(token string, expiry time.Time) error

	// Contains 检查令牌是否在黑名单中
	Contains(token string) bool

	// Cleanup 清理已过期的令牌
	Cleanup()
}

TokenBlacklist 定义令牌黑名单接口

type UserRepository

type UserRepository interface {
	// FindUserBySocialID 通过社交ID查找用户
	FindUserBySocialID(ctx context.Context, provider, socialID string) (interface{}, error)
	// CreateUser 创建新用户
	CreateUser(ctx context.Context, user interface{}) error
}

UserRepository 定义了查找和创建用户的接口

type WeChatProvider

type WeChatProvider struct {
	BaseSocialProvider
}

WeChatProvider 实现微信登录

func NewWeChatProvider

func NewWeChatProvider(config map[string]interface{}) *WeChatProvider

NewWeChatProvider 创建新的微信登录提供商

func (*WeChatProvider) ExchangeToken

func (p *WeChatProvider) ExchangeToken(ctx context.Context, code string) (*Token, error)

ExchangeToken 交换微信访问令牌

func (*WeChatProvider) GetAuthURL

func (p *WeChatProvider) GetAuthURL(state string) string

GetAuthURL 返回微信授权URL

func (*WeChatProvider) GetUserInfo

func (p *WeChatProvider) GetUserInfo(ctx context.Context, token *Token) (*SocialUser, error)

GetUserInfo 获取微信用户信息

Jump to

Keyboard shortcuts

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