Gin(十二):整合 JWT

AI助手选型指南:按任务类型匹配豆包、千问、DeepSeek、元宝 AI助手不是通用工具,而是面向特定任务流的专用协作者。理解大模型在语音交互、中文逻辑推理、代码编译理解和轻量信息速配等维度的能力差异,是实现高效人机协同的前提。豆包擅长会议纪要与多模态草稿生成,千问强于政策解读与结构化文档处理,DeepSeek深度适配编程全生命周期,元宝则聚焦低延迟、高精度的即时事实查询。技术选型的本质,是将任务特征(如是否含语音输入、是否需上下文连贯、是否涉及代码编译)与模型底层工作流(ASR预处理机制、句法树解析能力、Code-Comment对齐训练、MoE动态路由)精准对齐。本文基于 阅读详情

点击蓝色字关注我们!

一个努力中的公众号

长的好看的人都关注了

640?

在前后端分离的项目中,越来越多的项目采用JWT代替传统的cookie,这里我们来使用JWT结合Gin来作为一个登录授权和权限校验。

640

?什么是 JWT

640


JWT 的全称叫做 JSON WEB TOKEN,在目前前后端系统中使用较多。

JWT 构成

JWT 是由三段构成的。分别是 HEADER,PAYLOAD,VERIFY SIGNATURE,它们生成的信息通过.分割。

640?wx_fmt=jpeg

HEADER

header 是由 一个typ和alg组成,typ会指明为 JWT,而alg是所使用的加密算法。

 {	
  "alg": "HS256",	
  "typ": "JWT"	
 }

PAYLOAD

payload 是 JWT 的载体,也就是我们要承载的信息。这段信息是我们可以自定义的,可以定义我们要存放什么信息,那些字段。该部分信息不宜过多,它会影响 JWT 生成的大小,还有就是请勿将敏感数据存入该部分,该端数据前端是可以解析获取 token 内信息的。

官方给了七个默认字段,我们可以不全部使用,也可以加入我们需要的字段。

名称含义
Audience表示JWT的受众
ExpiresAt失效时间
Id签发编号
IssuedAt签发时间
Issuer签发人
NotBefore生效时间
Subject主题

VERIFY SIGNATURE

这也是 JWT 的最后一段,该部分是由算法计算完成的。

对刚刚的 header 进行 base64Url 编码,对 payload 进行 base64Url 编码,两端完成编码后通过.进行连接起来。

 base64UrlEncode(header).base64UrlEncode(payload)

完成上述步骤后,就要通过我们 header 里指定的加密算法对上部分进行加密,同时我们还要插入我们的一个密钥,来确保我的 JWT 签发是安全的。

这便是我们的第三部分。

当三部分都完成后,通过使用.将三部分分割,生成了上图所示的 JWT 。

JWT 登录原理

简单的说就是当用户登录的时候,服务器校验登录名称和密码是否正确,正确的话,会生成 JWT 返回给客户端。客户端获取到 JWT 后要进行保存,之后的每次请求都会讲 JWT 携带在头部,每次服务器都会获取头部的 JWT 是否正确,如果正确则正确执行该请求,否者验证失败,重新登录。

640?wx_fmt=jpeg

640

?Gin 生成 JWT

640


go 语言的 JWT 库有很多。jwt.io上也给出了很多 。这里使用jwt-go

"github.com/dgrijalva/jwt-go"

我们对登录方法进行改造。

// 省略代码	
 expiresTime := time.Now().Unix() + int64(config.OneDayOfHours)	
 claims := jwt.StandardClaims{	
     Audience:  user.Username,     // 受众	
     ExpiresAt: expiresTime,       // 失效时间	
     Id:        string(user.ID),   // 编号	
     IssuedAt:  time.Now().Unix(), // 签发时间	
     Issuer:    "gin hello",       // 签发人	
     NotBefore: time.Now().Unix(), // 生效时间	
     Subject:   "login",           // 主题	
 }	
 var jwtSecret = []byte(config.Secret)	
 tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)	
 // 省略代码

这里的config.OneDayOfHours设定了过期时间,这里设定了一天。通过StandardClaims 生成标准的载体,也就是上文提到的七个字段,其中 编号设定为 用户 id。其中的  jwtSecret是我们设定的密钥,

我们这里通过 HS256 算法生成tokenClaims,这就是我们的 HEADER 部分和 PAYLOAD。

 token, err := tokenClaims.SignedString(jwtSecret)

这样便生成了我们的 token 。我们要将我们的 token 和 Bearer 拼接在一起,同时中间用空格隔开。


 

生成 Bearer Token 。

当我们用户进行登录的时候,就可以通过该片段生成 JWT。

下面是完整代码:


 

通过 .http 请求测试,结果如下

 {	
   "result": {	
     "code": 200,	
     "message": "登录成功",	
     "data": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIxMjMiLCJleHAiOjE1NjQ3OTY0MzksImp0aSI6Ilx1MDAwMCIsImlhdCI6MTU2NDc5NjQxOSwiaXNzIjoiZ2luIGhlbGxvIiwibmJmIjoxNTY0Nzk2NDE5LCJzdWIiOiJsb2dpbiJ9.CpacmfBSMgmK2TgrT-KwNB60bsvwgyryGQ0pWZr8laU"	
   }	
 }

这个便完成了token的生成。

640

?Gin 校验 Token

640


那么,接下来就需要完成 token 的验证。

还记得之前我们验证用户是否授权采用的办法吗?是的,在中间件里查看用户 cookie。同样的方法,我们这里校验用户 JWT 是否有效。

编写我们的中间件。

新建立middleware/Auth.go

首先先编写我们的解析 token 方法,parseToken()

func parseToken(token string) (*jwt.StandardClaims, error) {	
     jwtToken, err := jwt.ParseWithClaims(token, &jwt.StandardClaims{}, func(token *jwt.Token) (i interface{}, e error) {	
         return []byte(config.Secret), nil	
 })	
     if err == nil && jwtToken != nil {	
         if claim, ok := jwtToken.Claims.(*jwt.StandardClaims); ok && jwtToken.Valid {	
             return claim, nil	
         }	
 }	
     return nil, err	
 }

通过传入我们的 token , 来对 token 进行解析。

完整的中间件代码


 

首先在请求头获取 token ,然后对先把 token 进行解析,将 Bearer 和 JWT 拆分出来,将 JWT 进行校验。

我们只需要对我们需要校验的路由进行添加中间件校验即可。


 

当我们访问/的时候就需要携带 token 了

 GET http://localhost:8080	
 Content-Type: application/json	
 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiIxMjMiLCJleHAiOjE1NjQ3OTQzNjIsImp0aSI6Ilx1MDAwMCIsImlhdCI6MTU2NDc5NDM0MiwiaXNzIjoiZ2luIGhlbGxvIiwibmJmIjoxNTY0Nzk0MzQyLCJzdWIiOiJsb2dpbiJ9.uQxGMsftyVFtYIGwQVm1QB2djw-uMfDbw81E5LMjliU


640

✍总结

640

本章节对什么是 JWT,Gin 中如何使用 JWT 做了介绍。但是不要过于迷信 JWT,JWT 还有很多问题,比如说 JWT 失效只能是时间过期,如果修改密码或者账户注销等操作需要我们另外添加逻辑判断。适合的地方选用适合的技术才能发挥最大的优势。

640

?‍?本章节代码

640


Github 请点击 阅读原文

往期推荐

Gin(一):Hello Gin

Gin(二):路由Router

Gin(三):配合模板 Tmpl

Gin(四):表单数据提交和模型绑定

Gin(五):连接MySQL

Gin(六):文件的上传

Gin(七):中间件的使用和定义

Gin(八): Cookie 的使用

Gin(九):生成 restful 接口

Gin(十):集成 Swagger 生成 API 文档

Gin(十一):集成 gorm

640?wx_fmt=jpeg

好看的人才能点

640

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南06 376: 分布式配置中心+配置加密+密钥管理+自动轮换+审计+回滚+健康检查+灰度+多集群+多租户+配置漂移检测+自动修复+合规+联邦学习+混沌工程+事件驱动+多语言SDK+配置可视化+配置模板+变量替换+配置对比+差异可视化+配置导入导出+配置订阅+WebHook+配置权限管理+RBAC+配置标签+配置搜索+配置依赖图+配置影响分析+配置历史趋势+配置预测+配置自动生成+配置推荐+配置健康评分+配置自愈+配置拓扑+配置热加载。故障恢复时,从上一个完成的checkpoint恢复,未提交的文件被丢弃。 阅读详情

相关推荐

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 470

8-gin使用JWT认证

什么是JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0认证的业务场景下。 为什么需要JWT 在偏传统的一些web项目中,我们通常使用的是Cookie-Session模式实现用户认证。相关认证流程大致如下: 用户在浏览器端填写用户名和密码,并发送给服务端 服务端对用户名和密码校验通过...

kismile 1027

2024年最新双摄像头的实时视频拼接及目标跟踪(一)_监控视频拼接实时(1),网络相关+C C++三方库的源码分析+数据结构与算法

opencv中采用了SURF,ORB进行特征点提取,如果装的是opencv2.0版本,则可以直接用SURF,如果是3.0版本,则需要下载相应的contrib库进行安装。原理不赘述,给出其实验结果对比和分析,原始图像1SURF特征点提取网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加戳这里获取一个人可以走的很快,但一群人才能走的更远!

m0_51437227的博客 937

【Gin】在Gin框架中使用JWT

/ CustomClaims 自定义声明类型 并内嵌jwt.RegisteredClaims// jwt包自带的jwt.RegisteredClaims只包含了官方字段// 假设我们这里需要额外记录一个username字段,所以要自定义结构体// 如果想要保存更多信息,都可以添加到这个结构体中// 可根据需要自行添加字段jwt.RegisteredClaims // 内嵌标准的声明// jwt token 的过期时间// CustomSecret 用于加盐的字符串。

大河之犬的博客 1456

算法竞赛推荐书单

前言 入坑算法竞赛已经一年半了,在这期间也读了不少关于算法竞赛的书,这些书对我的帮助还是蛮大的。平时看题解多是个人零散的题解,很难以系统的去学习,认认真真的挑选1-2本书来阅读,无论是从思维能力还是文字表达能力都会得到提升,以下都是我自己读过的书进行一下分享,难度由浅入深,部分书籍浅尝而止。 入门:《啊哈!算法》 适合:总题量150以下初步掌握C语言的萌新 一本充满智慧和趣味的算法入门书。没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点,通过幽默的语言配以可爱的插图来讲解算法。你更像是在阅读一个个轻松

TGX的博客 8245

语音增强评价指标全解析:从MOS到eSTOI的实战指南

本文全面解析了语音增强领域的核心评价指标,包括主观评价的黄金标准MOS,以及PESQ、STOI、eSTOI等关键客观指标。文章详细阐述了各指标的原理、适用场景与实战计算方法,并提供了Python代码示例,旨在帮助开发者和研究者建立科学的评估体系,以平衡语音可懂度与音质,从而优化算法效果。

yhn456789的博客 1200

DRF-JTW

1 JWT认证 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json Web Token(本质就是token)认证机制。 # Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。 # JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获

Python_anning的博客 868

VIPER22A实战:从零搭建15W非隔离电源,附BUCK电路调试心得

本文详细介绍了使用VIPER22A芯片从零搭建15W非隔离电源的全流程,重点解析BUCK电路设计与调试技巧。通过核心参数计算、PCB布局优化和效率提升方案,帮助工程师快速掌握DC-DC电源设计要点,实现高效稳定的电源转换。

redis7keeper的博客 671

Gin 框架之jwt 介绍与基本使用

JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密除了上面的字段, 你自己也可以添加自己想要的字段, 需要注意的是:这些信息是不加密的, 所以最好不要存敏感信息import (

淘小欣的博客 2072

哈工大2024春大数据挖掘期末考试回忆版试题

(3)现有一个用户数量远多于物品(还是物品远多于用户,忘了是哪个了)的情景,应该使用基于user-user的推荐系统还是item-itmen的推荐系统,说明原因。(1)L是n*n拉普拉斯矩阵,x是一个n*1列向量,证明对任意的x,(x)^TLx>=0(6分)(3)证明:p到o的K-可达距离,至少是o的K-distance(2分)(2)(1)的结果说明竞争率的上界是多少?(2)考Gain的意义,如何利用Gain选择划分点(2分)(2)说明如何利用划分后的数据进行验证(2分)(2)k可达距离是对称的吗?

ymd2002的博客 1892

Unity集成阿里云语音AI:从麦克风录音到实时语音合成的全流程实现

本文详细介绍了在Unity中集成阿里云语音AI服务,实现从麦克风录音到实时语音合成的完整流程。通过调用阿里云的语音转文字和文字转语音接口,开发者可以快速为游戏或应用添加语音交互功能,提升用户体验。文章涵盖了环境配置、签名认证、音频处理及项目集成等核心步骤,并提供了实用的调试技巧。

weixin_29224589的博客 324

Gin中使用jwt-go实现JWT鉴权登陆

JWT全称Json web token ,是一种用于通信双方之间传递安全信息的简洁的、URL安全的表述性声明规范,是目前最流行的跨域身份验证解决方案。JWT基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息,一旦用户完成了登陆,在接下来的每个请求中都会包含JWT,可以用来验证用户身份以及对路由,服务和资源的访问权限的验证。由于它的开销非常小,可以轻松的在不同域名的系统中传递,这也为应用的扩展提供了便利。JWT 以 JSON 对象的形式安全传递信息。

mjiarong的博客 2885

解读文献(五)------基于阻抗控制

文章目录背景主动柔顺控制阻抗控制基于力的阻抗控制基于位置的阻抗控制力位混合控制 背景 主动柔顺控制 阻抗控制 基于力的阻抗控制 基于位置的阻抗控制 力位混合控制 ...

accumulation 1万+

Claude代码插件开发实战:OpenAPI 3.1规范与FastAPI实现

大模型代码插件并非简单API调用,而是基于语义理解的工具能力集成。其核心在于遵循OpenAPI 3.1规范定义可被大模型‘阅读理解’的能力契约,涵盖动作声明、参数语义标注与结构化响应设计。该规范支撑Claude对工具意图的精准解析与上下文感知调用,技术价值体现在降低人机协作摩擦、实现自然语言驱动的自动化操作。典型应用场景包括系统监控、GitHub数据查询、JWT解析等运维与开发辅助任务。本文聚焦从零构建合规插件的关键路径:OpenAPI描述文件编写、FastAPI轻量后端实现及双向认证部署。

weixin_33892359的博客 427

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Gin从入门到精通(八)身份验证与授权(JWT)

/ 示例用户数据(实际应从数据库读取)// 定义 JWT 密钥(需保密,生产环境应从配置读取)var JwtSecret = []byte("your-secret-key") // 值需要8位以上。

Clown95 1157

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Go的Gin框架拦截器实现登录认证结合JWT实现会话记录

jwt会话技术替代session技术,go语言的演示及代码编写,使用gin web框架完成。

个人学习笔记库,一篇一篇记录成长的足迹 2927

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

gin中使用jwt

1. 前言 JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。 2. gin集成Jwt gin 可以自定义中间件,所以集成jwt可以以中间件的方式引入,jwt在golang上已有好几个现成的开源库,我用的是jwt-go,具体使用可以查看GitHub、或 https://pkg.go.dev/github.com/dgrijalva/jwt-go/v4中查看相关使用

小六 3849

在Gin中使用JWT做认证以及JWT的续签方案

记录了一下在Gin中简单的使用JWT,并且想了一个简单的Token续签方案,不需要服务端保存Token的状态,前端也不需要过多的配合

Monkey_D_Newdun的博客 3607

Gin框架集成JWT,实战

gin集成jwt的实践,通过例子加深对编写流程的理解

qq_63880817的博客 411

Gin 框架中如何实现 JWT 鉴权中间件

JWT,全称是 JSON Web Token,它是一个开放标准(RFC 7519),用于在各方之间作为 JSON 对象安全地传输信息。每个 Token 是一个紧凑且 URL 安全的字符串,能够被签名和加密,从而保证信息的完整性、真实性和机密性。JWT 通常由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature),它们之间用圆点(.)连接组合成一个完整的 Token。头部(Header)

hsuhwsb的博客 1164

gin入门教程(10):实现jwt认证

这个示例展示了如何在 Gin 框架中实现 JWT 认证,包括用户登录、生成 JWT 和验证 JWT 的中间件。你可以根据需求进行扩展,例如从数据库获取用户信息和密码验证等。

835

在Gin框架中使用JWT

通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输,可以避免被别人篡改,以及在用户认证授权方面相对于传统Session减小了开销。

m0_64196951的博客 690

Gin项目中使用JWT

先把使用的包给导入到项目中创建一个生成 token的函数,注意要在这里设置一下 密令的内容和过期时间接着就要去调用这个生成函数了。我这里在登录成功后调用这个函数,然后生成token为了测试,直接用静态数据进行传值了。这里 在密令头部加上。Bearer是一个认证方案,用于指定请求中所有的身份验证类型。Bearer 可以告诉服务器,请求中含有一个JWT Token,而不是其他类型的令牌或验证方式。

m0_63512120的博客 1037

gin中使用JWT

我们需要定制自己的需求来决定JWT中保存哪些数据,比如我们规定在JWT中要存储username信息,那么我们就定义一个MyClaims// CustomClaims 自定义声明类型 并内嵌jwt.RegisteredClaims// jwt包自带的jwt.RegisteredClaims只包含了官方字段// 假设我们这里需要额外记录一个username字段,所以要自定义结构体// 如果想要保存更多信息,都可以添加到这个结构体中// 可根据需要自行添加字段。

liu289747235的专栏 1426

Gin整合Jwt-基础token操作1

快速使用jwt-go进行基础的token生成以及解析校验等基本操作

delete_you的博客 921

认识JWT

1. JSON Web Token是什么   JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 2. 什么时候你应该用JSON Web Tokens 下列场景中使用JSON Web Token是很有用的: Authorizat...

anpinmao8082的博客 370
上一篇: Gin(十一):集成 gorm
下一篇: Gin(一):Hello
代码猎奇站
博客等级 码龄7年 39粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值