🎨 优化微信登录流程&新增手机和微信绑定接口
This commit is contained in:
@@ -3,6 +3,9 @@ package app
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.echol.cn/loser/lckt/global"
|
||||
"git.echol.cn/loser/lckt/model/app"
|
||||
r "git.echol.cn/loser/lckt/model/common/response"
|
||||
@@ -13,7 +16,6 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"go.uber.org/zap"
|
||||
"time"
|
||||
)
|
||||
|
||||
type AppUserApi struct{}
|
||||
@@ -63,14 +65,14 @@ func (*AppUserApi) Login(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if _, err = global.GVA_REDIS.Get(ctx, user.Phone).Result(); errors.Is(err, redis.Nil) {
|
||||
if _, err = global.GVA_REDIS.Get(ctx, strconv.Itoa(int(user.ID))).Result(); errors.Is(err, redis.Nil) {
|
||||
// 此处过期时间等于jwt过期时间
|
||||
dr, err := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
timer := dr
|
||||
if err := global.GVA_REDIS.Set(ctx, user.Phone, token, timer).Err(); err != nil {
|
||||
if err := global.GVA_REDIS.Set(ctx, strconv.Itoa(int(user.ID)), token, timer).Err(); err != nil {
|
||||
global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
|
||||
r.FailWithMessage("设置登录状态失败", ctx)
|
||||
return
|
||||
@@ -115,19 +117,26 @@ func (*AppUserApi) WechatLogin(ctx *gin.Context) {
|
||||
r.FailWithMessage("获取token失败", ctx)
|
||||
return
|
||||
}
|
||||
if _, err = global.GVA_REDIS.Get(ctx, user.Phone).Result(); errors.Is(err, redis.Nil) {
|
||||
if _, err = global.GVA_REDIS.Get(ctx, strconv.Itoa(int(user.ID))).Result(); errors.Is(err, redis.Nil) {
|
||||
// 此处过期时间等于jwt过期时间
|
||||
dr, err := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
timer := dr
|
||||
if err := global.GVA_REDIS.Set(ctx, user.Phone, token, timer).Err(); err != nil {
|
||||
if err := global.GVA_REDIS.Set(ctx, strconv.Itoa(int(user.ID)), token, timer).Err(); err != nil {
|
||||
global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
|
||||
r.FailWithMessage("设置登录状态失败", ctx)
|
||||
return
|
||||
}
|
||||
user_jwt.SetToken(ctx, token, int(claims.RegisteredClaims.ExpiresAt.Unix()-time.Now().Unix()))
|
||||
|
||||
result := map[string]interface{}{}
|
||||
result["User"] = user
|
||||
result["Token"] = token
|
||||
result["ExpiresAt"] = claims.RegisteredClaims.ExpiresAt.Unix() * 1000
|
||||
fmt.Println(result)
|
||||
|
||||
r.OkWithDetailed(gin.H{
|
||||
"User": user,
|
||||
"Token": token,
|
||||
@@ -182,7 +191,7 @@ func (*AppUserApi) PwdLogin(ctx *gin.Context) {
|
||||
return
|
||||
}
|
||||
timer := dr
|
||||
if err := global.GVA_REDIS.Set(ctx, user.Phone, token, timer).Err(); err != nil {
|
||||
if err := global.GVA_REDIS.Set(ctx, strconv.Itoa(int(user.ID)), token, timer).Err(); err != nil {
|
||||
global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
|
||||
r.FailWithMessage("设置登录状态失败", ctx)
|
||||
return
|
||||
@@ -289,3 +298,74 @@ func (a *AppUserApi) GetTeacherApply(context *gin.Context) {
|
||||
|
||||
r.OkWithDetailed(status, "获取教师申请状态成功", context)
|
||||
}
|
||||
|
||||
// BindWechat 手机登录用户绑定微信
|
||||
func (a *AppUserApi) BindWechat(context *gin.Context) {
|
||||
var p request.BindWechatReq
|
||||
if err := context.ShouldBind(&p); err != nil {
|
||||
global.GVA_LOG.Error("绑定微信请求参数有误")
|
||||
r.FailWithMessage("绑定微信请求参数有误", context)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := appUserService.BindWechat(p)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("绑定微信失败", zap.Error(err))
|
||||
}
|
||||
|
||||
// 生成新token
|
||||
token, claims, err := user_jwt.LoginToken(*user)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("获取token失败!", zap.Error(err))
|
||||
r.FailWithMessage("获取token失败", context)
|
||||
return
|
||||
}
|
||||
|
||||
// 此处过期时间等于jwt过期时间
|
||||
dr, err := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("解析JWT过期时间失败", zap.Error(err))
|
||||
r.FailWithMessage("解析JWT过期时间失败", context)
|
||||
return
|
||||
}
|
||||
|
||||
timer := dr
|
||||
if err := global.GVA_REDIS.Set(context, user.Phone, token, timer).Err(); err != nil {
|
||||
global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
|
||||
r.FailWithMessage("设置登录状态失败", context)
|
||||
return
|
||||
}
|
||||
|
||||
user_jwt.SetToken(context, token, int(claims.RegisteredClaims.ExpiresAt.Unix()-time.Now().Unix()))
|
||||
r.OkWithDetailed(gin.H{
|
||||
"User": user,
|
||||
"Token": token,
|
||||
"ExpiresAt": claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
|
||||
}, "绑定微信成功", context)
|
||||
}
|
||||
|
||||
// BindPhone 微信登录用户绑定手机号s
|
||||
func (a *AppUserApi) BindPhone(context *gin.Context) {
|
||||
var p request.BindPhoneReq
|
||||
if err := context.ShouldBind(&p); err != nil {
|
||||
global.GVA_LOG.Error("绑定手机号请求参数有误")
|
||||
r.FailWithMessage("绑定手机号请求参数有误", context)
|
||||
return
|
||||
}
|
||||
|
||||
// 验证码检查
|
||||
if result, _ := global.GVA_REDIS.Get(context, fmt.Sprintf("VerifyCode:%s", p.Phone)).Result(); result != p.Code {
|
||||
global.GVA_LOG.Error("验证码错误", zap.String("phone", p.Phone))
|
||||
r.FailWithMessage("验证码错误", context)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := appUserService.BindPhone(p)
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("绑定手机号失败", zap.Error(err))
|
||||
r.FailWithMessage("绑定手机号失败", context)
|
||||
return
|
||||
}
|
||||
|
||||
r.OkWithDetailed(user, "绑定手机号成功", context)
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ package user
|
||||
|
||||
import (
|
||||
"git.echol.cn/loser/lckt/global"
|
||||
"git.echol.cn/loser/lckt/model/app"
|
||||
common "git.echol.cn/loser/lckt/model/common/request"
|
||||
r "git.echol.cn/loser/lckt/model/common/response"
|
||||
"git.echol.cn/loser/lckt/model/user/request"
|
||||
@@ -138,3 +139,19 @@ func (a *UserApi) GetTeacherApplyList(context *gin.Context) {
|
||||
PageSize: p.PageSize,
|
||||
}, "获取教师申请列表成功", context)
|
||||
}
|
||||
|
||||
// UpdateTeacherApplyStatus 更新教师申请状态
|
||||
func (a *UserApi) UpdateTeacherApplyStatus(context *gin.Context) {
|
||||
var p app.TeacherApply
|
||||
if err := context.ShouldBind(&p); err != nil {
|
||||
r.FailWithMessage(err.Error(), context)
|
||||
global.GVA_LOG.Error("参数错误,更新教师申请状态失败", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
if err := userService.UpdateTeacherApplyStatus(p); err != nil {
|
||||
r.FailWithMessage("更新教师申请状态失败", context)
|
||||
return
|
||||
}
|
||||
r.OkWithMessage("更新教师申请状态成功", context)
|
||||
}
|
||||
|
Reference in New Issue
Block a user