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

用asp做宠物网站页面网站设计做图工具

用asp做宠物网站页面,网站设计做图工具,商标设计网站提供哪些服务,产品互联网营销推广1.jwt使用 安装 go get github.com/golang-jwt/jwt/v4 默认Claim 如果我们直接使用JWT中默认的字段#xff0c;没有其他定制化的需求则可以直接使用这个包中的和方法快速生成和解析token。 // 用于签名的字符串 var mySigningKey []byte(liwenzhou.com)// G…1.jwt使用 安装 go get github.com/golang-jwt/jwt/v4 默认Claim 如果我们直接使用JWT中默认的字段没有其他定制化的需求则可以直接使用这个包中的和方法快速生成和解析token。 // 用于签名的字符串 var mySigningKey []byte(liwenzhou.com)// GenRegisteredClaims 使用默认声明创建jwt func GenRegisteredClaims() (string, error) {// 创建 Claimsclaims : jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * 24)), // 过期时间Issuer: qimi, // 签发人}// 生成token对象token : jwt.NewWithClaims(jwt.SigningMethodHS256, claims)// 生成签名字符串return token.SignedString(mySigningKey) }// ParseRegisteredClaims 解析jwt func ValidateRegisteredClaims(tokenString string) bool {// 解析tokentoken, err : jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {return mySigningKey, nil})if err ! nil { // 解析token失败return false}return token.Valid }自定义Claims 我们需要定制自己的需求来决定JWT中保存哪些数据比如我们规定在JWT中要存储username信息那么我们就定义一个MyClaims结构体如下 // CustomClaims 自定义声明类型 并内嵌jwt.RegisteredClaims // jwt包自带的jwt.RegisteredClaims只包含了官方字段 // 假设我们这里需要额外记录一个username字段所以要自定义结构体 // 如果想要保存更多信息都可以添加到这个结构体中 type CustomClaims struct {// 可根据需要自行添加字段Username string json:usernamejwt.RegisteredClaims // 内嵌标准的声明 }然后我们定义JWT的过期时间这里以24小时为例 const TokenExpireDuration time.Hour * 24接下来还需要定义一个用于签名的字符串 // CustomSecret 用于加盐的字符串 var CustomSecret []byte(夏天夏天悄悄过去)生成JWT 我们可以根据自己的业务需要封装一个生成 token 的函数。 // GenToken 生成JWT func GenToken(username string) (string, error) {// 创建一个我们自己的声明claims : CustomClaims{username, // 自定义字段jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(TokenExpireDuration)),Issuer: my-project, // 签发人},}// 使用指定的签名方法创建签名对象token : jwt.NewWithClaims(jwt.SigningMethodHS256, claims)// 使用指定的secret签名并获得完整的编码后的字符串tokenreturn token.SignedString(CustomSecret) }解析JWT 根据给定的 JWT 字符串解析出数据。 // ParseToken 解析JWT func ParseToken(tokenString string) (*CustomClaims, error) {// 解析token// 如果是自定义Claim结构体则需要使用 ParseWithClaims 方法token, err : jwt.ParseWithClaims(tokenString, CustomClaims{}, func(token *jwt.Token) (i interface{}, err error) {// 直接使用标准的Claim则可以直接使用Parse方法//token, err : jwt.Parse(tokenString, func(token *jwt.Token) (i interface{}, err error) {return CustomSecret, nil})if err ! nil {return nil, err}// 对token对象中的Claim进行类型断言if claims, ok : token.Claims.(*CustomClaims); ok token.Valid { // 校验tokenreturn claims, nil}return nil, errors.New(invalid token) }2 gin中使用JWT 若不想自己处理可以采用三方jwt库https://github.com/appleboy/gin-jwt。 首先我们注册一条路由/auth对外提供获取Token的渠道 r.POST(/auth, authHandler)我们的authHandler定义如下 func authHandler(c *gin.Context) {// 用户发送用户名和密码过来var user UserInfoerr : c.ShouldBind(user)if err ! nil {c.JSON(http.StatusOK, gin.H{code: 2001,msg: 无效的参数,})return}// 校验用户名和密码是否正确if user.Username q1mi user.Password q1mi123 {// 生成TokentokenString, _ : GenToken(user.Username)c.JSON(http.StatusOK, gin.H{code: 2000,msg: success,data: gin.H{token: tokenString},})return}c.JSON(http.StatusOK, gin.H{code: 2002,msg: 鉴权失败,})return }用户通过上面的接口获取Token之后后续就会携带着Token再来请求我们的其他接口这个时候就需要对这些请求的Token进行校验操作了很显然我们应该实现一个检验Token的中间件具体实现如下 // JWTAuthMiddleware 基于JWT的认证中间件 func JWTAuthMiddleware() func(c *gin.Context) {return func(c *gin.Context) {// 客户端携带Token有三种方式 1.放在请求头 2.放在请求体 3.放在URI// 这里假设Token放在Header的Authorization中并使用Bearer开头// 这里的具体实现方式要依据你的实际业务情况决定authHeader : c.Request.Header.Get(Authorization)if authHeader {c.JSON(http.StatusOK, gin.H{code: 2003,msg: 请求头中auth为空,})c.Abort()return}// 按空格分割parts : strings.SplitN(authHeader, , 2)if !(len(parts) 2 parts[0] Bearer) {c.JSON(http.StatusOK, gin.H{code: 2004,msg: 请求头中auth格式有误,})c.Abort()return}// parts[1]是获取到的tokenString我们使用之前定义好的解析JWT的函数来解析它mc, err : ParseToken(parts[1])if err ! nil {c.JSON(http.StatusOK, gin.H{code: 2005,msg: 无效的Token,})c.Abort()return}// 将当前请求的username信息保存到请求的上下文c上c.Set(username, mc.Username)c.Next() // 后续的处理函数可以用过c.Get(username)来获取当前请求的用户信息} }注册一个/home路由发个请求验证一下吧。 r.GET(/home, JWTAuthMiddleware(), homeHandler)func homeHandler(c *gin.Context) {username : c.MustGet(username).(string)c.JSON(http.StatusOK, gin.H{code: 2000,msg: success,data: gin.H{username: username},}) }
http://www.zqtcl.cn/news/155596/

相关文章:

  • 一个域名可以建几个网站毕业设计可以做哪些简单网站
  • 知名商城网站建设报价wordpress 后台 logo
  • 单位网站建设框架yellow网站推广联盟
  • html5和php做网站做网站租用服务器
  • 网站开发中效率较高的编程语言公司域名注册流程
  • 万户网站管理系统4.0cms监控系统手机版下载
  • 宁波专业网站建设怎么做如何做一个虚拟网站
  • 网站栏目建设调研公司怎么建立一个网站
  • 苍溪建设局网站网站建设和维护采购协议
  • 代做网站微信号下载 wordpress插件
  • 泉州住房建设局网站wordpress输入html代码
  • 为什么访问外国网站速度慢沈阳网站公司排名
  • 网站建设+泰安网站项目建设策划方案
  • 微信人生里面微网站怎么做wordpress 第三方登录 代码
  • 做商城网站哪里高端大气网站案例
  • 网站做项目网站设计公司深
  • 学校做网站及费用建设网站有何要求
  • 河北邢台移动网站建设宁波网站开发公司电话
  • 免费建立个人网站申请seo搜索引擎优化推广
  • 如何拷贝服务器里面网站做备份金融网站怎么做的
  • 什么网站做的比较好网上投资网站建设
  • 公司网站运营方案策划办网站怎么赚钱
  • 贾汪区建设局网站设计接单兼职网站
  • 东莞商城网站建设哪家便宜wordpress 插件路径
  • 网站服务器 安全快递系统专注快递企业网站开发
  • 旅游网站平台建设的方案深圳移动官网网站建设
  • 如何建设企业人力资源网站网站建设和网络优化的区别
  • 辽宁网站设计影响网站用户体验
  • cms网站如何修改黄山建设网站
  • 宾爵手表官方网站小熊源码网