5 Star 14 Fork 12

go-course / go12

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
model.go 1.68 KB
一键复制 编辑 原始数据 按行查看 历史
Mr.Yu 提交于 2023-10-05 18:14 . 补充vblog 基于角色的鉴权
package token
import (
"encoding/json"
"time"
"gitee.com/go-course/go12/vblog/apps/user"
"gitee.com/go-course/go12/vblog/exception"
"github.com/rs/xid"
)
func NewToken() *Token {
return &Token{
// 生产一个UUID的字符串
AccessToken: xid.New().String(),
AccessTokenExpiredAt: 7200,
RefreshToken: xid.New().String(),
RefreshTokenExpiredAt: 3600 * 24 * 7,
CreatedAt: time.Now().Unix(),
}
}
type Token struct {
// 该Token是颁发
UserId int64 `json:"user_id"`
// 人的名称, user_name
UserName string `json:"username" gorm:"column:username"`
// 办法给用户的访问令牌(用户需要携带Token来访问接口)
AccessToken string `json:"access_token"`
// 过期时间(2h), 单位是秒
AccessTokenExpiredAt int `json:"access_token_expired_at"`
// 刷新Token
RefreshToken string `json:"refresh_token"`
// 刷新Token过期时间(7d)
RefreshTokenExpiredAt int `json:"refresh_token_expired_at"`
// 创建时间
CreatedAt int64 `json:"created_at"`
// 更新实现
UpdatedAt int64 `json:"updated_at"`
// 额外补充信息, gorm忽略处理
Role user.Role `gorm:"-"`
}
func (t *Token) TableName() string {
return "tokens"
}
func (t *Token) IsExpired() error {
duration := time.Since(t.ExpiredTime())
expiredSeconds := duration.Seconds()
if expiredSeconds > 0 {
return exception.NewTokenExpired("token %s 过期了 %f秒",
t.AccessToken, expiredSeconds)
}
return nil
}
// 计算Token的过期时间
func (t *Token) ExpiredTime() time.Time {
return time.Unix(t.CreatedAt, 0).
Add(time.Duration(t.AccessTokenExpiredAt) * time.Second)
}
func (u *Token) String() string {
dj, _ := json.Marshal(u)
return string(dj)
}
Go
1
https://gitee.com/go-course/go12.git
git@gitee.com:go-course/go12.git
go-course
go12
go12
8a8b3aa3c2e4

搜索帮助