Golang语言社区Go语言学习Golang 入门资料+笔记

(基础)golang+jwt实现用户登录获取token

2021-01-26  本文已影响0人  五岁小孩

(基础)golang+jwt实现用户登录获取token

//get token
func GetTokenService(name string,pwd string)(string,error){
  //非空校验
  if common.IsEmpty(name) || common.IsEmpty(pwd) {
      return "",errors.New("账号,密码不能为空")
  }
  token := jwt.New(jwt.SigningMethodHS256)
  claims:=make(jwt.MapClaims)
  claims["jti"]=time.Now().Unix()
  claims["iss"]="itxj"
  claims["iat"]=time.Now()
  claims["aud"]="mam"
  claims["sub"]=name
  claims["nbf"]=time.Now().Unix()
  claims["exp"]=time.Now().Add(time.Hour*time.Duration(24)).Unix()
  claims["cs"]="this is cs claims"
  token.Claims=claims
  tokenStr, err := token.SignedString([]byte(tokenApiSecretKey))
  if err!=nil {
      return "",err
  }
  return tokenStr,nil
}

校验token

//校验token
func ValidateTokenService(tokenStr string)(bool,error){

  token, errByParseToken := jwt.Parse(tokenStr, func(token *jwt.Token) (i interface{}, e error) {

      return []byte(tokenApiSecretKey),nil
  })
  if errByParseToken!=nil {
      return false,errors.New("An invalid Token ")
  }
  if !token.Valid {
      return false,errors.New("fail while invalid Token ")
  }
  return true,nil
}

> 获取校验成功后的token(*jwt.Token)
>
> 
//获取校验并且返回token
func GetValidateTokenService(tokenStr string)(*jwt.Token,error){

  token, er := jwt.Parse(tokenStr, func(token *jwt.Token) (i interface{}, e error) {
      return []byte(tokenApiSecretKey), nil
  })
  if er!=nil {
      return token,er
  }
  return token,nil
}

校验成功后根据key获取token中载荷的数据

//从token claims中提取数据
func GetValFormTokenClaims(key string,claims jwt.Claims)string{

  v := reflect.ValueOf(claims)
  if v.Kind() == reflect.Map {
      for _, k := range v.MapKeys() {
          value := v.MapIndex(k)

          if fmt.Sprintf("%s", k.Interface()) == key {
              return fmt.Sprintf("%v", value.Interface())
          }
      }
  }
  return ""
}
上一篇 下一篇

猜你喜欢

热点阅读