truthhun 2 years ago
parent 9839aaf127
commit c4c9090568

@ -36,16 +36,14 @@ message User {
} }
message RegisterAndLoginRequest { message RegisterAndLoginRequest {
string username = 1 string username = 1 [ (gogoproto.moretags) = "validate:\"min=4,max=32\"" ];
[ (gogoproto.moretags) = "validate:\"min=4,max=32,alphanum\"" ];
string password = 2 [ (gogoproto.moretags) = "validate:\"min=6\"" ]; string password = 2 [ (gogoproto.moretags) = "validate:\"min=6\"" ];
string captcha = 3; string captcha = 3;
string captcha_id = 4; string captcha_id = 4;
} }
message GetUserCaptchaRequest { message GetUserCaptchaRequest {
string type = string type = 1; // registerlogincommentfind_passwordupload
1; // registerlogincommentfind_passwordupload
} }
message LoginReply { message LoginReply {

@ -3,7 +3,6 @@ package biz
import ( import (
"context" "context"
"moredoc/model" "moredoc/model"
"net/http"
"strings" "strings"
"time" "time"
@ -11,10 +10,16 @@ import (
grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth" grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth"
"go.uber.org/zap" "go.uber.org/zap"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
) )
/*
tokenctx便使
ctxctx
*/
type AuthService struct { type AuthService struct {
dbModel *model.DBModel dbModel *model.DBModel
logger *zap.Logger logger *zap.Logger
@ -34,9 +39,9 @@ const (
CtxKeyUserClaims ContextKey = "user" CtxKeyUserClaims ContextKey = "user"
) )
const ( // const (
messageInvalidToken = "您的登录令牌已过期,请重新登录" // messageInvalidToken = "您的登录令牌已过期,请重新登录"
) // )
type ServiceAuthFuncOverride interface { type ServiceAuthFuncOverride interface {
AuthFuncOverride(ctx context.Context, fullMethodName string) (context.Context, error) AuthFuncOverride(ctx context.Context, fullMethodName string) (context.Context, error)
@ -56,18 +61,16 @@ func (s *AuthService) AuthUnaryServerInterceptor() grpc.UnaryServerInterceptor {
// 1. 从权限表中查询API如果存在该API则表示该API需要权限才能访问如果不存在则跳过 // 1. 从权限表中查询API如果存在该API则表示该API需要权限才能访问如果不存在则跳过
// 2. 如果用户携带有token则根据token判断是否有效如果有效则获取用户信息放到ctx否则跳过 // 2. 如果用户携带有token则根据token判断是否有效如果有效则获取用户信息放到ctx否则跳过
func (s *AuthService) AuthGRPC(ctx context.Context, info *grpc.UnaryServerInfo) (context.Context, error) { func (s *AuthService) AuthGRPC(ctx context.Context, info *grpc.UnaryServerInfo) (context.Context, error) {
token, err := grpc_auth.AuthFromMD(ctx, "bearer") token, err := grpc_auth.AuthFromMD(ctx, "bearer")
if err != nil { if err != nil {
// 可忽略错误 return ctx, nil
return ctx, err
} }
claims, err := s.dbModel.CheckUserJWTToken(token) claims, err := s.dbModel.CheckUserJWTToken(token)
// token存在但是不正确或者已过期这时需要返回错误前端清除存储的错误登录信息 // token存在但是不正确或者已过期这时需要返回错误前端清除存储的错误登录信息
if err != nil || claims == nil || claims.ExpiresAt < time.Now().Unix() || s.dbModel.IsInvalidToken(claims.UUID) { if err != nil || claims == nil || claims.ExpiresAt < time.Now().Unix() || s.dbModel.IsInvalidToken(claims.UUID) {
return ctx, status.Error(codes.Unauthenticated, messageInvalidToken) // return ctx, status.Error(codes.Unauthenticated, messageInvalidToken)
return ctx, nil
} }
newCtx := context.WithValue(ctx, CtxKeyUserClaims, claims) newCtx := context.WithValue(ctx, CtxKeyUserClaims, claims)
@ -88,8 +91,9 @@ func (s *AuthService) AuthGin() gin.HandlerFunc {
token := bearer[1] token := bearer[1]
claims, err := s.dbModel.CheckUserJWTToken(token) claims, err := s.dbModel.CheckUserJWTToken(token)
if err != nil || claims == nil || claims.ExpiresAt < time.Now().Unix() || s.dbModel.IsInvalidToken(claims.UUID) { if err != nil || claims == nil || claims.ExpiresAt < time.Now().Unix() || s.dbModel.IsInvalidToken(claims.UUID) {
ctx.JSON(http.StatusUnauthorized, status.Error(codes.Unauthenticated, messageInvalidToken)) // ctx.JSON(http.StatusUnauthorized, status.Error(codes.Unauthenticated, messageInvalidToken))
ctx.Abort() // ctx.Abort()
ctx.Next()
return return
} }

Loading…
Cancel
Save