golang通用后台管理系统03(登录校验,并生成token)

代码

package serviceimport ("fmt"//"fmt""gin/common""gin/config"sysEntity "gin/system/entity"sysUtil "gin/system/util""github.com/gin-gonic/gin""log"
)func Login(c *gin.Context, loginBody *sysEntity.LoginBody) map[string]string {var resultList []map[string]interface{}var resultTokenList = make(map[string]string)//参数接收userName := loginBody.UserNamepassword := loginBody.Password//不为空校验传参if userName == "" {common.ReturnError(c, 500, sysUtil.MapToJson("用户名不能为空"), resultList, int64(len(resultList)))panic("")}if password == "" {common.ReturnError(c, 500, sysUtil.MapToJson("密码不能为空"), resultList, int64(len(resultList)))panic("")}log.Println("用户输入的账号:" + userName)log.Println("用户输入的密码:" + password)//TODO 校验数据库中的  用户信息//从数据库中查询输入用户的信息sysUser := &sysEntity.LoginBody{}//取值 赋值sysUser.UserName = userName//查收过滤条件拼装//查询多条记录,Find函数返回的是一个数组err := config.GormDb.Model(&sysEntity.LoginBody{}).Table("sys_user ").Select("user_id as UserId", "user_name as UserName", "password as Password", "dept_id as DeptId").Where("LOWER(user_name) = LOWER(?)", userName).Scan(&resultList).Errorif err != nil {log.Println("查询用户失败,原因:", err)//panic("用户查询失败")}if resultList == nil {log.Println("查询用户失败,原因:数据库中没有查到   userName 叫 admin 的用户信息")common.ReturnError(c, 500, sysUtil.MapToJson("查询用户失败,原因:数据库中没有查到   userName 叫 admin 的用户信息"), resultList, int64(len(resultList)))panic("")}//数据库中有数据进行后面操作userNameDB := ""passwordDB := ""deptIdDB := 0if len(resultList) > 0 {log.Println("用户信息查询成功!!!!!,进行后续操作")for _, item := range resultList {// 将集合中的值赋值给sysUser结构体的对应字段userNameDB = item["UserName"].(string)passwordDB = item["Password"].(string)//deptIdDB = item["DeptId"].(int)log.Println("数据库中的密码密文为:" + userNameDB + "=====" + passwordDB)}}//rsa解密 数据库中用户的密文密码plainText := []byte(passwordDB)plainText, err = sysUtil.RsaDecrypt(plainText, "./private.pem")if err != nil {log.Println("==================解密发生异常")fmt.Println(err)}fmt.Printf("数据库密码解密后的明文为:%s\n", plainText)log.Println("====================用户输入的明文密码为:" + password)log.Println("====================数据库中查找到的密码解密后为:" + string(plainText))//数据库中的密码密文  解密后,与用户输入的  明文密码 进行比较if string(plainText) == password {log.Println("************************您输入的密码正确,密码校验通过!!!********************************")} else {log.Println("************************您输入的密码错误,密码校验不通过!!!********************************")common.ReturnError(c, 500, sysUtil.MapToJson("登录失败,用户密码错误,请仔细检查"), resultList, int64(len(resultList)))panic("")}//TODO 创建令牌sysUserEntity := &sysEntity.SysUserEntity{}sysUserEntity.UserName = userNamesysUserEntity.DeptId = deptIdDBsysUserEntity.Password = string(plainText)//TODOtoken := CreateToken(c, userName, sysUserEntity)log.Println("111111111111111111111111111111111111111111111111111----token生成结束, TIKEN:" + token)resultTokenList["token"] = tokenreturn resultTokenList
}//RSA加密解密测试验证
func Rsapassword(c *gin.Context, loginBody *sysEntity.LoginBody) []map[string]interface{} {var resultList []map[string]interface{}//参数接收//userName := loginBody.UserName//password := loginBody.Password//生成密钥对err := sysUtil.GenerateRsaKey(1024, "./")if err != nil {log.Println("==================生成密钥对发生异常")fmt.Println(err)}//加密plainText := []byte("123456")cipherText, err := sysUtil.RsaEncrypt(plainText, "./public.pem")if err != nil {fmt.Println(err)log.Println("==================加密发生异常")}fmt.Printf("加密后为:%s\n", cipherText)//解密plainText, err = sysUtil.RsaDecrypt(cipherText, "./private.pem")if err != nil {log.Println("==================解密发生异常")fmt.Println(err)}fmt.Printf("解密后为:%s\n", plainText)return resultList
}

2.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2216.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

三维测量与建模笔记 - 2.2 射影几何

教程中H矩阵写的有问题,上图中H矩阵应该是(n1) x (m1) 共点不变性,下图中黄色方块标记的点,在射影变换前后,虽然直线的形状有所变化,但仍然相交于同一个点。 共线不变性,下图黄色标记的两个点,在…

操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

目录 1. 基于软件层面(Petersons Solution) Petersons Solution 满足三个要求: 好处: 缺点 2. 基于硬件层面 1. Disabling Interrupts (禁用中断) 概念解释: 代码框架: 要求: 禁用中断的好处与问题: 2. Test and Set Lock (…

系统架构设计师-未来信息综合技术(1)

目录 一、信息物理系统CPS 1、CPS体系结构 2、CPS的技术体系 3、CPS的应用场景 二、人工智能技术 1、人工智能关键技术 2、人工智能(AI)芯片 一、信息物理系统CPS 定义:CPS通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术&a…

支持向量机背后的数学奥秘

一、基本概念与原理 1.1 支持向量机的定义 支持向量机是一种二分类模型,其核心思想是在样本空间中寻找一个超平面,将不同类别的样本分开。这个超平面被称为决策边界或分隔超平面。支持向量是距离决策边界最近的点,这些点决定了决策边界的位…

LeetCode 热题100 之 回溯1

1.全排列 思路分析1(回溯):要生成一个不含重复数字的数组 nums 的所有可能全排列,我们可以使用回溯算法。这种算法通过递归的方法探索所有可能的排列组合,并在合适的时机进行回溯,确保不会遗漏任何排列。回…

「C/C++」C/C++ 之 变量作用域详解

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

深度学习-如何计算神经网络的输出?

给定一个包含输入层、隐藏层和输出层的神经网络架构,可以逐层推导出各节点的输出值。具体步骤如下: 输入层计算: 输入层有 3 个节点,编号为 1、2、3,输入向量为 x_1, x_2, x_3 。输入层节点的输出值直接就是输入向量&a…

【ESP32】ESP-IDF开发 | I2C从机接收i2c_slave_receive函数的BUG导致程序崩溃解决(idf-v5.3.1版本)

1. 问题 在调试I2C外设的demo时,按照官方文档的描述调用相关API,烧录程序后发现程序会不断崩溃,系统log如下。 初步分析log,原因是访问到了不存在的地址。一开始我以为是自己的代码问题,反反复复改了几次都会出现同样的…

vue3学习记录-nextTick

vue3学习记录-nextTick 1. 案例场景2. 使用方法2.1 回调方式2.2 async&#xff0c;await 3.原理 1. 案例场景 聊天框实现输入内容&#xff0c;滚动条默认滚到最底部。 <template><div class"chat_box"><div class"chat_list" ref"chat…

microsoft defender smartscreen怎么关闭

打开windows安全中心 点击基于声誉的保护设置 把检查应用和文件等开关关掉即可

【c++日常刷题】两个数字的交集、点击消除、最小花费爬楼梯

两个数字的交集⭐ 两个数组的交集_牛客题霸_牛客网 (nowcoder.com) 题目描述&#xff1a; 解题思路&#xff1a; 通过遍历num1&#xff0c;如果遍历到的元素如果在num2中能找到&#xff0c;则这是num1和num2的公告元素&#xff1b; 这里需要借助两个数组来实现&#xff1a;…

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)

大会官网&#xff1a;www.icadi.net (CVA为ICADI分会&#xff0c;网站沿用主会议&#xff1b;议程、出版将以主会为准&#xff09; 大会时间&#xff1a;2024年11月29-12月1日 大会地点&#xff1a;中国-天津 终轮截稿&#xff1a;2024年11月22号&#xff08;特殊情况联系会…

Leetcode—3216. 交换后字典序最小的字符串【简单】

2024每日刷题&#xff08;196&#xff09; Leetcode—3216. 交换后字典序最小的字符串 实现代码 class Solution { public:int flagodd_even(int num) {if(num % 2) {// 奇数return 1;} else {// 偶数return 0;}}string getSmallestString(string s) {int n s.length();int …

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求&#xff1a;界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式&#xff1a; ①设计师提供&#xff1a;基于项目的图标&#xff0c;拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…

从数据提取到管理:TextIn平台的全面解析与产品体验

一、引言 在现代信息时代&#xff0c;文档解析和管理已经成为企业和开发者不可或缺的工具。TextIn是合合信息旗下的一款智能文档处理平台&#xff0c;为开发者和企业提供高效、精准的文档解析工具&#xff0c;帮助用户轻松应对各种复杂的文档处理需求。本文将深入探讨TextIn的…

WorkFlow源码剖析——Communicator之TCPServer(中)

WorkFlow源码剖析——Communicator之TCPServer&#xff08;中&#xff09; 前言 上节博客已经详细介绍了workflow的poller的实现&#xff0c;这节我们来看看Communicator是如何利用poller的&#xff0c;对连接对象生命周期的管理。&#xff08;PS&#xff1a;与其说Communica…

路由参数与请求方式

文章目录 命令创建控制器先创建laravel 工程 处理请求方式路由参数必选参数可选参数 路由别名重定向至路由别名 命令创建控制器 先创建laravel 工程 composer create-project --prefer-dist laravel/laravel使用二级目录 处理请求方式 // 基本路由 Route::any(d1,function(){r…

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。 UIAbility的设计理念&#xff1a; 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议&#xff1a; UIAbility组件是系统调度的基本单元&#xff0c…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客&#xff1a;苏三有春的博客 前言 作者的编程环境为VScode&#xff0c;工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢&#xff0c;作者一般使用的方式是右键文件夹&#xff0c;直接选择"通过code打开文件夹"…

java 20 Stream流

一.Stream 1.所在包 import java.util.stream.*; 2.中间方法与终端方法 //中间方法返回的stream类型 可以连续调用 //终端方法--》返回类型肯定不是Steam 【long void Optional int .... //中间方法必须以终端方法收尾才能执行 //否则中间方法不执行 //终端方法后面肯定没有…