snippet/gin/auth-filter.go

85 lines
2.0 KiB
Go
Raw Normal View History

2022-01-13 12:27:28 +00:00
package gin
import (
"encoding/json"
"github.com/gin-gonic/gin"
"myschools.me/suguo/snippet/redis"
)
2023-09-13 09:27:25 +00:00
// 从redis中认证用户
2022-01-13 12:27:28 +00:00
func AuthUser() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.GetHeader("Authorization")
claims := cacheGet(&token)
if claims == nil {
c.Abort()
return
}
c.Set("user", claims)
c.Next()
}
}
2023-09-13 09:27:25 +00:00
// 从redis中获取用户信息最佳实践经验建议把此代码放service层
2022-01-13 12:27:28 +00:00
func cacheGet(token *string) interface{} {
var user interface{}
b, err := redis.GetBytes(token)
if err != nil {
return nil
}
if err := json.Unmarshal(*b, &user); err != nil {
return nil
}
return &user
}
// gin拦截基于微服务的拦截
// func AuthUserBS() gin.HandlerFunc {
// return func(c *gin.Context) {
// token := c.GetHeader("Authorization")
// claims := userAuthWithGrpc(&token)
// if claims == nil {
// yy.RespUnauth(c, "token无效或过期请重新登录", nil, nil)
// c.Abort()
// }
// c.Set("user", claims)
// c.Next()
// }
// }
// func userAuthWithGrpc(token *string) *yy.UserClaims {
// srv, err := consul.FindService("oauth", "v1")
// if err != nil {
// logrus.WithFields(logrus.Fields{
// "func": "userAuthWithGrpc",
// }).Errorf("consul.FindServer: %s", err.Error())
// return nil
// }
// defer srv.Close()
// client := pb.NewCertificationClient(srv)
// resp, err := client.Auth(context.Background(), &pb.CertificationAuthRequest{
// Token: *token,
// })
// if err != nil {
// logrus.WithFields(logrus.Fields{
// "func": "userAuthWithGrpc",
// }).Errorf("client.Auth: %s", err.Error())
// return nil
// }
// if resp.Result == "ok" {
// r := &yy.UserClaims{}
// if err := json.Unmarshal(resp.Data.Value, r); err != nil {
// logrus.WithFields(logrus.Fields{
// "func": "userAuthWithGrpc",
// }).Errorf("json.Unmarshal: %s", err.Error())
// return nil
// }
// return r
// }
// logrus.WithFields(logrus.Fields{
// "func": "userAuthWithGrpc",
// }).Warnln("nil")
// return nil
// }