实战——golang实现JWT验证登录

当我们在进行用户登录校验时,需要存储用户信息实现状态化,具体内容可参考文章cookie、session、token与JWT

我们先经过用户校验,在用户校验成功后通过CreateToken(uid string, expireDuration time.Duration)来创建jwt字符串,然后返回给客户端,客户端在之后对服务端进行请求时都会携带jwt信息,设置一个校验中间件通过parseToken(tokenString string)对jwt进行解析校验,校验通过后得到对应的自定义信息。

可将token与用户信息存入redis中实现白名单校验,key:uid,val:token;通过将验证成功的Uid到redis中找出相对应的之前存入的token,在将其与本次的token进行比对,看是否一致,以此来实现单点登录与token过期。

具体实现可参考下面代码和源码

package verify
import (
	"time"
	"github.com/dgrijalva/jwt-go"
)

// 私钥
var jwtKey=[]byte("My Secret")

// 获取token信息
func CreateToken(uid string, expireDuration time.Duration) (string, error) {
   
	expire := time.Now().Add(expireDuration)
	// 将 uid,用户角色, 过期时间作为数据写入 token 中
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
   
		// 自定义的字段,用于之后用户信息的获取
		"Uid":  uid,
		//系统提供的字段
		//token签发日期
		"iat": time.Now().Unix(),
		// token过期日期
		"exp": time.Now().Add(expireDuration).Unix(),
	})
	// SecretKey 用于对用户数据进行签名,不能暴露
	return token.SignedString(jwtKey)
}

type Claims struct {
   
	Uid string
	//系统提供的字段
	jwt.StandardClaims
}

func parseToken(tokenString string)(*jwt.Token, *Claims, 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值