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
|
|
|
|
|
|
// }
|