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:

相关推荐
captain3763 分钟前
Spring IoC和DI(2)
java·后端·spring
梦想很大很大30 分钟前
重新思考 Workrun:AI 时代,我们还需要手动编排 Workflow 吗?
前端·人工智能·后端
Ai-_Man32 分钟前
ChatGPT还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·javascript·人工智能·chatgpt·小程序·ecmascript
2501_9339232533 分钟前
SpringCloud组件:Nacos服务注册快速入门
后端·spring·spring cloud·nacos
问天_观心35 分钟前
模型微调学习(二)
开发语言·人工智能·学习·语言模型·github
小羊没烦恼!37 分钟前
深入浅出SQL Server中的死锁
java·开发语言·前端·数据库·后端·spring·c#
白露与泡影37 分钟前
Java 面试八股文及答案整理 | 后端面试高频题(2026)
java·开发语言·面试
microrain42 分钟前
专业版守核心,企业版做增量:SagooIoT 的跨模块能力出口
物联网·架构·golang·sagooiot
夜晚回家43 分钟前
Python 赋值运算符详解 | 从 = 到 +=,一张记账单讲清复合赋值
开发语言·python
柠檬味拥抱44 分钟前
基于 YOLO11 的海底垃圾视觉巡检系统:水下 ROV + Streamlit 全流程实战
后端