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.rhkb.cn/news/91582.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生网关API标准背景及发展现状

Gateway API是一个开源的API标准,源自Kubernetes SIG-NETWORK兴趣组。从出身角度讲,可谓根正苗红,自从开源以来备受关注,被寄予厚望。Gateway API旨在通过声明式、可扩展性和面向角色的接口来发展Kubernetes服务网络,并…

基于Selenium技术方案的爬虫入门实践

通过爬虫技术抓取网页,动态加载的数据或包含 JavaScript 的页面,需要使用一些特殊的技术和工具。以下是一些常用的技术方法: 使用浏览器模拟器:使用像 Selenium、PhantomJS 或其他类似工具可以模拟一个完整的浏览器环境&#xff0…

vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />当表达式为true的时候&#…

9.3.2.2网络原理(传输层TCP)

TCP全部细节参考RFC标准文档 一.TCP特点: 有连接,可靠传输,面向字节流,全双工. 二.TCP数据报: 1.端口号是传输层的重要概念. 2.TCP的报头是变长的(UDP是固定的8字节),大小存在4位首部长度中,用4个bit位(0~15)表示长度单位是4字节.(TCP报头最大长度是60字节,前面20字节是固定…

[MAUI]在.NET MAUI中实现可拖拽排序列表

.NET MAUI 中提供了拖放(drag-drop)手势识别器&#xff0c;允许用户通过拖动手势来移动控件。在这篇文章中&#xff0c;我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中&#xff0c;列表中显示不同大小的磁贴&#xff08;Tile&#xff09;并且可以拖拽排序。 …

【D3.js 01】

D3.js 01 说在前面1 概述2 配置Web环境3 HTML4 SVG5 DOM6 JS7 常用接口8 D3语法基础9 使用D3查询SVG10 使用D3设置SVG中属性11 修改整组属性12 使用D3添加与删除SVG元素13 数据读取 —— CSV数据14 D3.js的数值计算15 比例尺Scale - LinearScale - Band 16 引入坐标轴17 DATA-J…

13.3 目标检测和边界框

锚框的计算公式 假设原图的高为H,宽为W 详细公式推导 以同一个像素点为锚框&#xff0c;可以生成 (n个缩放 m个宽高比 -1 )个锚框 锚框的作用&#xff1a; 不用直接去预测真实框的四个坐标&#xff0c;而是&#xff1a; 1.先生成多个锚框。 2.预测每个锚框里是否含有要预测…

【11】Redis学习笔记 (微软windows版本)【Redis】

注意:官redis方不支持windows版本 只支持linux 此笔记是依托微软开发windows版本学习 一、前言 Redis简介&#xff1a; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据结构存储系统&#xff0c;它也被称为数据结构服务器。Redis以键值对&am…

使用Python统计字符内容的占比

说明&#xff1a;如果有自己动手做过字符动画&#xff0c;会知道字符动画的“灵动性”核心在于使用的字符集。 简单来说&#xff0c;动画转为字符动画&#xff0c;原理是将动画转为灰阶图&#xff0c;灰度范围是0~255&#xff0c;然后将对应灰度的像素点转为对应比值的字符。这…

轻松抽象JavaScript

上一期说了伪随机方法中有一个问题&#xff0c;那就是如何得到0.1这个值 理论上是可以的&#xff0c;但是实践缺有很大区别 大海捞针可信吗&#xff1f;可行吗&#xff1f; 当然可行&#xff0c;也可行&#xff0c;用一块超级大磁铁&#xff0c;磁力拉满&#xff0c;而且还具…

【论文阅读】基于深度学习的时序预测——Non-stationary Transformers

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

web-js

<html><head><title>基本语法</title></head><body><script>// window.alert("js");// document.write("js");// console.log("js");// function add(a,b){// return ab;// }var result functio…

商城-学习整理-高级-全文检索-ES(九)

目录 一、ES简介1、网址2、基本概念1、Index&#xff08;索引&#xff09;2、Type&#xff08;类型&#xff09;3、Document&#xff08;文档&#xff09;4、倒排索引机制4.1 正向索引和倒排索引4.2 正向索引4.3 倒排索引 3、相关软件及下载地址3.1 Kibana简介3.2 logstash简介…

【Go语言】go_session(超级详细)

目录 前言附件代码审计Index函数Admin函数Flask函数server.py问题 思路本地搭建环境admin绕过SaveUploadedFile方法payload 总结 前言 国赛初赛有一道题目go session&#xff0c;用go的Gin框架和pongo2模板引擎写的&#xff0c;是关于go的pongo2模板注入和flask的热加载&#…

分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

官方文档&#xff1a;https://nginx.org/en/docs/http/ngx_http_proxy_module.html 1. 代理缓冲 proxy_buffer 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲&#xff0c;Nginx可以在接收完整的响应后再将其发送给客户端&#xff0c;从而提高性能和效率…

智谷星图赵俊:让人才和区块链产业“双向奔赴”丨对话MVP

区块链产业需要什么样的人才&#xff1f;赵俊很有发言权。 赵俊是北京智谷星图科技有限公司的技术总监&#xff0c;也是FISCO BCOS官方认证讲师。他2017年接触区块链&#xff0c;随后选择人才培育领域深耕。“为区块链行业引进更多人才这件事很有价值&#xff0c;跟我的职业理…

【Java转Go】快速上手学习笔记(一)之环境安装篇

前言 前两天开始学习Go&#xff0c;需要写篇笔记记录总结一下。 Go它也是可以做web开发的&#xff0c;就像Java一样&#xff0c;做JavaWeb项目&#xff0c;Go也可以做GoWeb项目。当然Go的作用用处肯定不止这个&#xff0c;还有很多&#xff0c;只是因为我目前的话&#xff0c…

C进阶(2/7)前篇——指针进阶

前言&#xff1a;本文章讲解部分指针进阶内容。后续继续更新。 文章重点&#xff1a; 1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 目录 前言&#xff1a;本文章讲解部分指针进阶内容。后续继续更新。 指针初阶了解&#xff1a; 1.字符指针 1.1一道有关于字…

大模型基础:GPT家族与提示学习

大模型基础:GPT 家族与提示学习 从 GPT-1 到 GPT-3.5 GPT(Generative Pre-trained Transformer)是 Google 于2018年提出的一种基于 Transformer 的预训练语言模型。它标志着自然语言处理领域从 RNN 时代进入 Transformer 时代。GPT 的发展历史和技术特点如下: GPT-12018年6月…

java面试基础 -- 方法重载 方法重写

目录 重载 重写 重载 方法的重载是指在同一个类中定义多个方法, 他们具有相同的名称, 但是具有不同的参数列表, 例如: public void myMethod(int arg1) {// 方法体 }public void myMethod(int arg1, int arg2) {// 方法体 }public void myMethod(String arg1) {// 方法体 }…