beego+jwt+redis小白入门版

5 篇文章 0 订阅

首先 要清楚 jwt

当你理解 为什么 使用了 jwt 还要使用 redis的时候,好的过关了。

如果你不理解 没关系,
简单讲 jwt,就是 生成一个json格式的 token,这个token 里面含有 网页的登陆信息,是谁在登陆这个 网页,是个证明。

jwt里面 也有 token 有效期的注意。

那么为什么还要用 redis 呢,你可以想一下,如果 密码修改,或者退出登陆了,但是你之前 登陆过的 界面都还是可以继续使用,是不是一个安全问题?
所以强安全的系统是不允许 弹出的token 还继续用的。所以 用redis 存一下,再增加下 redis的检查。
如果重新登陆,token更新了,那么原来的token 就校验不过了。

再简单讲, 强安全系统 就增加redis 再管理下token,弱的安全系统,就不用redis,直接 jwt 就可以了。

再说redis,golang的redis包真的很多,我分别用不同的包封装过。
最后,我选择了,
github.com/go-redis/redis
这个呢,主要是因为 可以加时间有效期,我简单封装了下。

func GetRedisClientPool(address string) (*redis.Client, error) {
redisdb := redis.NewClient(&redis.Options{
Addr: address,
Password: “”,
DB: 0,
PoolSize: 100})

pong, err := redisdb.Ping().Result()
if err != nil {
	fmt.Println(pong, err)
}
return redisdb, err

}

func ClientSet(client *redis.Client, key string, value interface{}, inhour int) error {
defer client.Close()

err := client.Set(key, value, time.Hour*time.Duration(inhour)).Err()
if err != nil {
	fmt.Printf("try set key[foo1] to value[bar1] error[%s]\n",
		err.Error())
	//err_handler(err)
}
return err

}

你可能也是需要这样的结构
在这里插入图片描述
在 beego.Router 前加入 过滤
在这里插入图片描述
jwt的生成:自己定义一些 自己需要的 信息,一个便于 网页访问,一个便于 检查。

func Create_token(username string, userid string, secret string) (string, int64) {
expireToken := time.Now().Add(time.Hour * 12).Unix()
claims := Claims{
username,
userid,
jwt.StandardClaims{
ExpiresAt: expireToken,
Issuer: username,
},
}

// Create the token using your claims
c_token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

// Signs the token with a secret.
signedToken, _ := c_token.SignedString([]byte(secret))

return signedToken, expireToken

}

func Token_auth(signedToken, secret string) (username string, userid string, err error) {
claimsqqq := Claims{ /*
appid,
jwt.StandardClaims{
ExpiresAt: expireToken,
Issuer: appid,
},*/
}
token, err := jwt.ParseWithClaims(signedToken, &claimsqqq, func(token *jwt.Token) (interface{}, error) {
return []byte(secret), nil
})

if token == nil {
	return "", "", nil
}

if claims, ok := token.Claims.(*Claims); ok && token.Valid {
	//fmt.Printf("%v %v", claims.Username, claims.StandardClaims.ExpiresAt)
	//fmt.Println(reflect.TypeOf(claims.StandardClaims.ExpiresAt))
	//return claims.Appid, err
	return claims.Username, claims.Userid, err
}
return "", "", err

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值