go语言实现简单登陆样例

目录

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:

相关推荐
阿猿先森几秒前
PyQt6+pyqtgraph折线图绘制显示
开发语言·python
legend_jz4 分钟前
【Linux】线程的互斥和同步
linux·运维·服务器·开发语言·笔记·学习·学习方法
l1384942745116 分钟前
Java综合练习
java·开发语言·算法
人机emmo_490372112228 分钟前
第4关 Java分支结构之Switch【Java 分支结构之 Switch:灵活的选择利器】
java·开发语言·python
重生之我是数学王子34 分钟前
QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现
开发语言·c++·qt
St_Ludwig1 小时前
蓝桥杯疑似例题解答方案(打印任意阶杨辉三角)
c语言·c++·后端·算法·职场和发展·蓝桥杯
Lx3521 小时前
C# 一分钟浅谈:GraphQL API 与 C#
后端·c#
枫の准大一1 小时前
C++从零到满绩——类和对象(中)
开发语言·c++
HEX9CF1 小时前
【数字图像处理+MATLAB】通过 Roberts, Prewitt, Sobel, LoG 等算子实现图像边缘检测:使用 edge 函数
开发语言·matlab·edge
凡人的AI工具箱1 小时前
40分钟学 Go 语言高并发实战:高性能缓存组件开发
开发语言·后端·缓存·架构·golang