当前位置: 首页 > news >正文

go的gin和gorm框架实现切换身份的接口

使用go的gin和gorm框架实现切换身份的接口,接收前端发送的JSON对象,查询数据库并更新,返回前端信息

接收前端发来的JSON对象,包含由openid和登陆状态组成的一个string和要切换的身份码int型

后端接收后判断要切换的身份是否低于该用户身份,是则更新数据库的登录状态为要切换的身份码,返回由openid和新的登录状态组成的string,否则返回错误码和权限不足的错误信息

测试代码

创建两个结构体,一个用来查询数据库,一个用来接收前端发送的JSON对象

连接数据库,接收前端POST请求,提取数据,查库,处理,返回信息

package mainimport ("github.com/gin-gonic/gin""gorm.io/driver/mysql""gorm.io/gorm""log""net/http""strconv"
)type User struct {Openid     string `json:"openid" gorm:"primaryKey"`IdCode     int    `json:"idcode"`LoginState int    `json:"login_state"`
}
type RequestData struct {OpenidAndLoginStatus string `json:"openidAndLoginState"`IdCodeToChange       int    `json:"idcodeToChange"`
}func main() {dsn := "username:password@tcp(host:port)/database?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {log.Fatal(err)}err = db.AutoMigrate(&User{})if err != nil {log.Fatal(err)}router := gin.Default()// 接口测试地址 192.168.160.128:8080/updaterouter.POST("/update", func(c *gin.Context) {var requestData RequestDataif err := c.ShouldBindJSON(&requestData); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON data"})return}openidAndLoginState := requestData.OpenidAndLoginStatusopenID := openidAndLoginState[:len(openidAndLoginState)-1]loginStatus, _ := strconv.Atoi(openidAndLoginState[len(openidAndLoginState)-1:])idCode := requestData.IdCodeToChangevar user Userresult := db.Where("openid = ?", openID).First(&user)if result.Error != nil {c.JSON(http.StatusOK, gin.H{"error": "Invalid openid"})return}if user.IdCode >= idCode {user.LoginState = loginStatusresult = db.Save(&user)if result.Error != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": "Database save error"})return}} else {c.JSON(http.StatusOK, gin.H{"error": "Insufficient privileges"})return}response := openID + strconv.Itoa(idCode)c.JSON(http.StatusOK, gin.H{"response": response})})err = router.Run(":8080")if err != nil {return}
}
http://www.lryc.cn/news/125353.html

相关文章:

  • 仓库库存管理难点在哪?有哪些仓库库存管理软件?
  • 服务链路追踪
  • macOS - 安装使用 libvirt、virsh
  • Windows Server 2019设置使用照片查看器查看图片的设置方法
  • 【需求输出】流程图输出
  • opencv+ffmpeg+QOpenGLWidget开发的音视频播放器demo
  • stable-diffusion-webui 的模型更新
  • Gin模板语法
  • Go http.Handle和http.HandleFunc的路由问题
  • 如何使用Kali Linux进行渗透测试?
  • 简单易用且高效的跨平台开发工具:Xojo 2023 for Mac
  • HIVE SQL实现分组字符串拼接concat
  • 【问心篇】渴望、热情和选择
  • 【贪心】CF1841 D
  • 移动端预览指定链接的pdf文件流
  • 【Go 基础篇】Go语言字符类型:解析字符的本质与应用
  • Java基础(十二)面向对象编程 OOP
  • 在阿里云服务器上安装Microsoft SharePoint 2016流程
  • Ubuntu设置定时重启
  • sqlloader学习笔记
  • 内网ip与外网ip
  • 分布式 - 消息队列Kafka:Kafka消费者和消费者组
  • feign调用和被调用者字段名称不对应解决
  • 【UE4 RTS】07-Camera Boundaries
  • 大语言模型之二 GPT发展史简介
  • 前后端分离------后端创建笔记(09)密码加密网络安全
  • 《Effects of Graph Convolutions in Multi-layer Networks》阅读笔记
  • 低代码助力传统制造业数字化转型策略
  • 什么叫做云计算
  • springboot 使用zookeeper实现分布式队列