This commit is contained in:
yvan 2025-09-05 23:35:47 +08:00
parent 16fb22479f
commit e26a9e7735
4 changed files with 42 additions and 25 deletions

View File

@ -111,18 +111,19 @@ func (w *MiniUserApi) GetUserInfo(c *gin.Context) {
// 构造响应数据 // 构造响应数据
resp := wechatResponse.MiniUserInfoResponse{ resp := wechatResponse.MiniUserInfoResponse{
ID: user.ID, ID: user.ID,
OpenID: user.OpenID, OpenID: user.OpenID,
UnionID: user.UnionID, UnionID: user.UnionID,
NickName: user.Nickname, NickName: user.Nickname,
Avatar: user.AvatarURL, Avatar: user.AvatarURL,
Phone: user.Phone, Phone: user.Phone,
Gender: user.Gender, Gender: user.Gender,
City: user.City, City: user.City,
Province: user.Province, Province: user.Province,
Country: user.Country, Country: user.Country,
CreateTime: user.CreatedAt.Format("2006-01-02 15:04:05"), CreateTime: user.CreatedAt.Format("2006-01-02 15:04:05"),
UpdateTime: user.UpdatedAt.Format("2006-01-02 15:04:05"), UpdateTime: user.UpdatedAt.Format("2006-01-02 15:04:05"),
NeedPhoneAuth: user.Phone == nil || *user.Phone == "", // 如果没有手机号则需要授权
} }
c.JSON(200, wechatResponse.SuccessResponseWithMsg(resp, "获取成功")) c.JSON(200, wechatResponse.SuccessResponseWithMsg(resp, "获取成功"))

View File

@ -135,18 +135,19 @@ type MiniLoginResponse struct {
// MiniUserInfoResponse 小程序用户信息响应 // MiniUserInfoResponse 小程序用户信息响应
type MiniUserInfoResponse struct { type MiniUserInfoResponse struct {
ID uint `json:"id"` // 用户ID ID uint `json:"id"` // 用户ID
OpenID string `json:"openid"` // 用户openid OpenID string `json:"openid"` // 用户openid
UnionID *string `json:"unionid"` // 用户unionid UnionID *string `json:"unionid"` // 用户unionid
NickName *string `json:"nickName"` // 用户昵称 NickName *string `json:"nickName"` // 用户昵称
Avatar *string `json:"avatar"` // 用户头像 Avatar *string `json:"avatar"` // 用户头像
Phone *string `json:"phone"` // 用户手机号 Phone *string `json:"phone"` // 用户手机号
Gender *int `json:"gender"` // 性别0-未知1-男2-女 Gender *int `json:"gender"` // 性别0-未知1-男2-女
City *string `json:"city"` // 城市 City *string `json:"city"` // 城市
Province *string `json:"province"` // 省份 Province *string `json:"province"` // 省份
Country *string `json:"country"` // 国家 Country *string `json:"country"` // 国家
CreateTime string `json:"createTime"` // 创建时间 CreateTime string `json:"createTime"` // 创建时间
UpdateTime string `json:"updateTime"` // 更新时间 UpdateTime string `json:"updateTime"` // 更新时间
NeedPhoneAuth bool `json:"needPhoneAuth"` // 是否需要授权手机号
} }
// PhoneUpdateResponse 手机号更新响应 // PhoneUpdateResponse 手机号更新响应

View File

@ -56,9 +56,13 @@ func (w *MiniService) Code2Session(code string) (*model.MiniUser, error) {
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
// 创建新用户 // 创建新用户
// 生成默认昵称:萌宠爱 + OpenID的前6位
defaultNickname := "萌宠爱" + session.OpenID[:6]
user = model.MiniUser{ user = model.MiniUser{
OpenID: session.OpenID, OpenID: session.OpenID,
SessionKey: &session.SessionKey, SessionKey: &session.SessionKey,
Nickname: &defaultNickname,
} }
if session.UnionID != "" { if session.UnionID != "" {
user.UnionID = &session.UnionID user.UnionID = &session.UnionID

View File

@ -68,13 +68,24 @@ func SetUserToken(c *gin.Context, token string, maxAge int) {
} }
func GetUserToken(c *gin.Context) string { func GetUserToken(c *gin.Context) string {
// 首先尝试从 user-token 头部获取
token := c.Request.Header.Get("user-token") token := c.Request.Header.Get("user-token")
// 如果没有,尝试从 Authorization Bearer 头部获取
if token == "" {
authHeader := c.Request.Header.Get("Authorization")
if authHeader != "" && len(authHeader) > 7 && authHeader[:7] == "Bearer " {
token = authHeader[7:] // 去掉 "Bearer " 前缀
}
}
// 如果还是没有,尝试从 cookie 获取
if token == "" { if token == "" {
j := NewJWT() j := NewJWT()
token, _ = c.Cookie("user-token") token, _ = c.Cookie("user-token")
claims, err := j.ParseToken(token) claims, err := j.ParseToken(token)
if err != nil { if err != nil {
global.GVA_LOG.Error("重新写入cookie token失败,未能成功解析token,请检查请求头是否存在user-token且claims是否为规定结构") global.GVA_LOG.Error("重新写入cookie token失败,未能成功解析token,请检查请求头是否存在user-token或Authorization Bearer且claims是否为规定结构")
return token return token
} }
SetUserToken(c, token, int((claims.ExpiresAt.Unix()-time.Now().Unix())/60)) SetUserToken(c, token, int((claims.ExpiresAt.Unix()-time.Now().Unix())/60))