当前位置: 首页 > news >正文

如何伪原创 网站怎样创建个人购物网站

如何伪原创 网站,怎样创建个人购物网站,科技霸主从新能源车开始,四川住房和城乡建设厅网站不能进入文章目录 背景基于Token认证机制简介常见的Token类型Token的生成和验证在项目工程里创建jwt.go文件根目录新建.env文件 创建登录接口 /loginToken认证机制的优点 背景 登录流程#xff0c;相信大家都很熟悉的。传统网站采用session后端验证登录状态#xff0c;大致流程如下相信大家都很熟悉的。传统网站采用session后端验证登录状态大致流程如下 用户输入用户名和密码 / 手机号和验证码点击登录按钮提交表单。后端校验前端传递过来的信息验证通过在缓存中存储用户信息。后续每次请求时携带session_id发送给服务端验证登录状态。 综上所述一个简单的登录流程就完成了但是你会发现在现如今session机制已无法满足一些服务架构特别是在分布式服务和单点登录等功能使用session机制完成登录认证过程就需要解决共享session的问题再者如果用户量很多服务器内存压力会很大等等。 基于Token认证机制简介 Token 认证机制 是一种常用的身份验证方法特别适用于现代化的 前后端分离 和 微服务架构 的应用。相比传统的 Session 认证机制Token 认证具有一些明显的优势特别是在 扩展性 和 跨平台 支持上大致流程如下 4. 客户端通过用户名和密码请求登录后端对接收到的账号和密码进行验证 5. 如验证通过则会签发一个Token返回给客户端进行存储 6. 后续客户端通过Authorization头部携带Token向服务器请求资源。 常见的Token类型 最常用的Token类型是JWT(JSON Web Token)它是一种自包含的、基于JSON格式的Token。 JWT分为三个部分 Header头部 通常包含Token类型(例如JWT)和所使用的签名算法(例如HS256)。 Payload负载 包含用户的相关信息如用户ID、权限等。这是Token的主体部分不加密因此可以被客户端解码但签名确保其不被篡改。 Signature签名 由服务器端的密钥生成用来验证Token的合法性和完整性。签名部分用于防止Token在传输过程中被篡改。 Token的生成和验证 在项目工程里创建jwt.go文件 参考路径BackEnd/pkg/auth/jwt.go package authimport (errorsostimegithub.com/golang-jwt/jwt/v5github.com/joho/godotenv )// Secret 从环境变量中加载 JWT 密钥 var jwtSecret []byte(getJWTSecret())// getJWTSecret 从环境变量中获取 JWT 密钥 func getJWTSecret() string {// 加载.env文件if err : godotenv.Load(); err ! nil {panic(无法加载 .env 文件请确保文件存在并正确配置)}secret : os.Getenv(JWT_SECRET)if secret {panic(环境变量 JWT_SECRET 未设置请配置后再运行程序)}return secret }// GenerateToken 生成 JWT Token func GenerateToken(username string) (string, error) {claims : jwt.MapClaims{username: username,exp: time.Now().Add(time.Hour).Unix(), // 一小时后过期iat: time.Now().Unix(), // 签发时间}token : jwt.NewWithClaims(jwt.SigningMethodHS256, claims)return token.SignedString(jwtSecret) } // 验证签名时通过解析 token 验证 token 是否有效再验证是否过期。验证Token 是用在用户登录后所有请求都需要携带 token 然后服务端获取到 token 再进行验证过。 func ValidateToken(tokenString string) (jwt.MapClaims, error) {token, err : jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {if _, ok : t.Method.(*jwt.SigningMethodHMAC); !ok {return nil, errors.New(签名方法无效请检查 Token 的生成方式)}return jwtSecret, nil})if err ! nil {return nil, err}if claims, ok : token.Claims.(jwt.MapClaims); ok token.Valid {return claims, nil}return nil, errors.New(无效的 Token请重新登录获取有效的 Token) }根目录新建.env文件 该文件用于区分不同环境的参数和记录密钥等信息 JWT_SECRETkklive创建登录接口 /login 参考路径BackEnd/internal/user/handle.go package userimport (database/sqlmy-ecommerce-app/pkg/authnet/httpgithub.com/gin-gonic/gingolang.org/x/crypto/bcrypt )// Response 定义统一的响应结构 type Response struct {Code int json:codeMessage string json:message }// UserLoginRequest 定义登录请求结构 type UserLoginRequest struct {Username string json:username binding:requiredPassword string json:password binding:required }// UserQueryRequest 查询用户请求结构 type UserQueryRequest struct {Username string json:username binding:required }// UserQueryResponse 查询用户响应结构 type UserQueryResponse struct {ID int json:idUsername string json:usernameNickname string json:nicknameFace string json:faceEmail string json:emailCreated_at string json:created_at }// UserLoginResponse 定义登录成功的响应 type UserLoginResponse struct {Message string json:messageToken string json:token,omitemptyCode int json:code }// LoginHandler 用户登录接口 // Summary 用户登录 // Description 用户通过用户名和密码登录 // Tags 用户模块 // Accept json // Produce json // Param user body UserLoginRequest true 登录请求参数 // Success 200 {object} UserLoginResponse // Failure 400 {object} Response // Failure 401 {object} Response // Router /api/login [post] func LoginHandler(db *sql.DB) gin.HandlerFunc {return func(ctx *gin.Context) {var req UserLoginRequestif err : ctx.ShouldBindJSON(req); err ! nil {ctx.JSON(http.StatusBadRequest, gin.H{code: 401,message: 参数错误,})return}var passwordHash stringerr : db.QueryRow(SELECT password FROM li_admin_user WHERE username ?, req.Username).Scan(passwordHash)if err ! nil {if err sql.ErrNoRows {ctx.JSON(http.StatusUnauthorized, gin.H{code: 405,message: 用户名或密码错误,})} else {ctx.JSON(http.StatusInternalServerError, gin.H{code: 500,message: 服务器错误,})}return}if err : bcrypt.CompareHashAndPassword([]byte(passwordHash), []byte(req.Password)); err ! nil {ctx.JSON(http.StatusUnauthorized, gin.H{code: 405,message: 用户名或密码错误,})return}token, err : auth.GenerateToken(req.Username)if err ! nil {ctx.JSON(http.StatusInternalServerError, gin.H{code: 500, // Token生成错误message: 请重新登录,})return}ctx.JSON(http.StatusOK, UserLoginResponse{Code: 200,Message: 登录成功,Token: token,})} }Token认证机制的优点 使用Token进行无状态登录认证后就可以轻松的实现多端登录和单点登录SSO在签名算法中加入Token机器信息就可以有效的控制账号的多端登录登出场景。 支持多端同时登录任意端退出登录时其他端保持不变每个端会生成自己的Token并且相互独立支持多端同时登录一端退出所有端退出登录增加用户登录设备表记录账号登录的设备和对应的Token信息当一端点击退出时在服务端删除缓存中的Token信息即可多端选择性退出部分端退出登录时增加一个需要退出端的对应设备类型或者设备ID然后对应设备下的token 进行失效处理。 当然除了以上使用场景还有其他的优点欢迎在评论区一起交流
http://www.w-s-a.com/news/603472/

相关文章:

  • 做网站架构需要注意什么百度竞价排名推广
  • 网站接口设置地税局内网网站建设
  • 谷歌提交网站入口wordpress前台自动登录
  • 规模以上工业企业的标准是什么洛阳霞光seo网络公司
  • 怎样用文本建一个网站做美容美发学校网站公司
  • 南宁企业网站建设制作芜湖网站建设推广
  • 泉州市建设局网站公示深圳建站公司好坏
  • 如何搭建网站教程一个人制作网站
  • 网站开发专业都有哪些课程广州安全教育平台账号找回
  • 网站调整方案适合平面设计师的网站
  • 免费服务器建立网站用html5做的旅游网站代码
  • 学校英语网站栏目名称WordPress禁用邮件注册
  • 手机qq网页版网站沧州手机网站开发
  • 深圳罗湖网站设计公司建设的网站属于无形资产吗
  • 网站开发python西安网站建站品牌
  • 网站开发商标属于哪一类做网站还有钱赚吗
  • 做设计的搜素材上什么网站好设计公司画册设计哪家好
  • 视频网站开发需要什么语言做ui设计一年后年薪多少
  • 网站服务器维护费用统一企业官方网站
  • 网站如何调用手机淘宝做淘宝客呼和浩特网站运营公司
  • 做推广可以上那些网站网页游戏排行榜2014前十名
  • 国外网站备案流程企业网站 流程
  • 重庆网站建设letide童程童美少儿收费价目表
  • 苏州建站仿站东莞排名推广
  • 大中小网站的区分wordpress个人主页主题
  • 商务网站建设的可行性分析包括小程序源码网免费
  • 永州网站建设收费标准重庆网站建设公司夹夹虫专业
  • python做网站多少钱wordpress 2.8
  • 深圳网站平台网站开发工作程序怎么写
  • 自己可以接单做网站吗wordpress 添加自定义按钮