go语言实现简单登陆返回token样例

目录

1、代码实现样例:

2、postman调用,获取登陆后的token:


1、代码实现样例:

package main

import (
	"net/http"
	"time"

	"github.com/dgrijalva/jwt-go"
	"github.com/gin-gonic/gin"
)

var (
	// 密钥,用于签署 JWT 令牌
	signingKey = []byte("secret")
)

// 用户信息
type User struct {
	Username string `json:"username"`
	Password string `json:"-"`
}

// 模拟用户数据
var users = map[string]User{
	"user1": {"user1", "password1"},
	"user2": {"user2", "password2"},
}

// 登录处理程序
func LoginHandler(c *gin.Context) {
	var credentials struct {
		Username string `json:"username"`
		Password string `json:"password"`
	}
	if err := c.BindJSON(&credentials); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request"})
		return
	}

	// 检查用户名和密码
	user, ok := users[credentials.Username]
	if !ok || user.Password != credentials.Password {
		c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid username or password"})
		return
	}

	// 创建 JWT 令牌
	token := jwt.New(jwt.SigningMethodHS256)
	claims := token.Claims.(jwt.MapClaims)
	claims["username"] = user.Username
	claims["exp"] = time.Now().Add(time.Hour * 24).Unix() // 令牌过期时间为24小时

	// 签名令牌
	tokenString, err := token.SignedString(signingKey)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to generate token"})
		return
	}

	// 返回令牌给客户端
	c.JSON(http.StatusOK, gin.H{"token": tokenString})
}


func main() {
	r := gin.Default()

	// 登录路由
	r.POST("/login", auth2.LoginHandler)

	// 启动服务
	r.Run(":8080")
}

2、postman调用,获取登陆后的token:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—2639. 查询网格图中每一列的宽度【简单】

2024每日刷题&#xff08;121&#xff09; Leetcode—2639. 查询网格图中每一列的宽度 实现代码 class Solution { public:int func(int num) {if(num 0) {return 1;}int len 0;while(num ! 0) {len;num / 10;}return len;}vector<int> findColumnWidth(vector<ve…

怎么通过isinstance(Obj,Class)验证?【isinstance】

最近有这样一个项目&#xff0c;这个项目可以用一个成熟的项目的构造树&#xff0c;读取树&#xff0c;再检索的过程&#xff0c;现在有新的需求&#xff0c;另一个逻辑构造同样节点结构的树&#xff0c;pickle序列化保存&#xff0c;再使用原来项目的读取、检索函数&#xff0…

Altair® PBS Professional®——行业超前的 HPC 和高吞吐量计算工作负载管理器和作业调度程序

PBS Professional 是一款快速、强大的工作负载管理器&#xff0c;旨在提高生产力、优化利用率和效率&#xff0c;并简化集群、云和超级计算机的管理——从极大的 HPC 工作负载到数百万个小型、高吞吐量作业。PBS Professional 能够自动执行作业调度、管理、监视和报告任务&…

4月25日 C++day3

#include <iostream> using namespace std;class Person {const string name;int age;char sex; public:Person():name("lisi"){cout << "Person无参构造" << endl;}Person(string name,int age,char sex):name(name),age(age),sex(sex)…

WordPress内存不足如何处理

本周有一个客户&#xff0c;购买Hostease的Linux虚拟主机&#xff0c;询问我们的在线客服&#xff0c;站点出现WordPress内存不足如何处理。我们为用户提供教程&#xff0c;用户很快完成了设置。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有帮助。 WordPre…

Sora新突破!AI生成电影迈向新阶段,配音版Sora登场!将如何改变影视行业?

Sora之后迎来新突破&#xff01; 配音版Sora来袭&#xff0c;AI生成电影又更近一步&#xff01; 在2024年伊始&#xff0c;人工智能界迎来了一次创新性的突破&#xff0c;由AI语音技术的先锋公司ElevenLabs带头实现。他们最近的成就体现在为OpenAI的Sora视频模型提供了令人动容…

k8s学习(三十七)centos下离线部署kubernetes1.30(高可用)

文章目录 准备工作1、升级操作系统内核1.1、查看操作系统和内核版本1.2、下载内核离线升级包1.3、升级内核1.4、确认内核版本 2、修改主机名/hosts文件2.1、修改主机名2.2、修改hosts文件 3、关闭防火墙4、关闭SELINUX配置5、时间同步5.1、下载NTP5.2、卸载5.3、安装5.4、配置5…

Leetcode—1041. 困于环中的机器人【中等】

2024每日刷题&#xff08;121&#xff09; Leetcode—1041. 困于环中的机器人 实现代码 class Solution { public:bool isRobotBounded(string instructions) {int x 0;int y 0;int d 0;vector<vector<int>> direction{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};for…

[嵌入式系统-54]:RT-Thread:内核基础与核心概念

目录 前言&#xff1a; 一、RT-Thread 内核介绍 1.线程调度 2.时钟管理 3.线程间同步与互斥 4.线程间通信 5.内存管理 6.I/O 设备管理 二、RT-Thread 启动流程 三、RT-Thread 程序内存分布 四、RT-Thread 自动初始化机制 五、RT-Thread 内核对象模型 1. 静态对象和…

ElasticSearch总结1

目录 一、ElasticSearch介绍&#xff1a; 举例一&#xff1a; 举例二&#xff1a; 举例三&#xff1a; 二、ELK技术栈 三、Elasticsearch 的基本概念&#xff1a; 四、正向索引和倒排索引&#xff1a; 正向索引&#xff1a; 倒排索引&#xff1a; 五、Mysql和Elastics…

http1.1和http2.0的同源请求数限制

判断协议版本 :scheme: 在请求头中表示使用的是HTTP/2协议。即 出现 :开头的请求头Chrome 只支持查看 HTTP/1.x 的 Raw Headers&#xff0c;对这种请求&#xff0c;会给出 view source 选项。HTTP2.0不给出。可继续学习 https://www.cnblogs.com/kirito-c/p/10360868.html抓包…

渐变边框文字效果?CSS 轻松拿捏!

今天&#xff0c;有个群友问了我这么一个问题&#xff0c;如果不想切图&#xff0c;是否有办法实现带渐变边框的字体效果&#xff1f;如下所示&#xff1a; 本文&#xff0c;就将尝试一下&#xff0c;在 CSS 中&#xff0c;我们可以如何尽可能的实现这种渐变边框字体效果。 元…

从浏览器输入url到页面加载(八)你的web网站有几台服务器?

你有没有想过一个问题&#xff0c;做为一名前端开发&#xff0c;你的网站上线后&#xff0c;准备了几台服务器&#xff1f;前端静态资源用了几台&#xff0c;你调接口的那个后端部署了几台&#xff1f; 目录 1 没接触过这个问题很正常 2 当访问量上升的时候 2.1 提升带宽 …

构建下一代去中心化应用:基于BASE链的DApp开发

在区块链技术的快速发展中&#xff0c;去中心化应用&#xff08;Decentralized Applications&#xff0c;DApps&#xff09;已经成为了一个热门话题。这些应用通过区块链技术&#xff0c;实现了去中心化、透明、安全和不可篡改的特性&#xff0c;为用户提供了全新的体验和解决方…

2022 csp-j 答案(精选题)

主题目 16 - 21题 22 - 27题 28 - 34题 35 -39题 40 - 44题 精选题目 答案及解析 28题 答案&#xff1a;T 解析&#xff1a;考查时间复杂度评估。 31题 答案&#xff1a;A 解析&#xff1a;模拟即可。 32题 答案&#xff1a;B 解析&#xff1a;模拟即可。 34题 答…

力扣141.环形链表142.环形链表Ⅱ 附证明

题目链接&#xff1a; 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 141.环形链表 方法思路&#xff1a;快慢指针 代码: class Solution { public:bool hasCycle(ListNode *head) {if(!head){return fa…

单片机编程实例400例大全(1-100)

最近有一些新手&#xff0c;咨询我去实现某个功能&#xff0c;没思路&#xff0c;无从下手&#xff0c;怎么办&#xff1f; 平时太忙&#xff0c;没时间一一解答&#xff0c;今天发篇文说下。 这是每个人必经的阶段&#xff0c;不必自责和焦虑。 我是如何解决这个问题的&#x…

Postman 汉化安装及使用指南:快速上手 Postman 中文版

Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化&#xff0c;包括每个步骤的详细说明。 下载安装 Postman 1、打开浏览器&#xff0c;访问 Postman 官网&#xff0c;下载适用于自己系统的…

(el-Transfer)操作(不使用 ts):Element-plus 中 Transfer 穿梭框右侧数据不展示的问题

Ⅰ、Element-plus 提供的Transfer树形控件组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供Transfer组件情况&#xff1a; 其一、Element-ui 自提供的Transfer代码情况为(示例的代码)&#xff1a; <template><p style"text-align: center; margin: …

Nacos原理-2024

文章目录 1. 什么是Nacos2. 注册中心原理3. 配置中心原理 1. 什么是Nacos Nacos注册中心分为server与client&#xff0c;server采用Java编写&#xff0c;为client提供注册发现服务与配置服务。而client可以用多语言实现&#xff0c;client与微服务嵌套在一起&#xff0c;nacos…