Skip to content

A demo project for user authentication and authorization control using JWT, MySQL, Redis and gRPC technology stack. The project provides HTTP API and gRPC API

License

Notifications You must be signed in to change notification settings

Neon-Rainbow/JWT_authorization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JWT_authorization

English version

一个使用了JWT + MySQL + Redis + gRPC 技术栈的用户认证,权限控制的Demo项目,项目提供了HTTP接口以及gRPC接口

项目模型

项目采用了通用脚手架:CLD模型,其中controller层,service层以及dao层均使用了接口

项目使用了依赖注入的方式,这种方式可以实现一个清晰、模块化且易于维护的代码结构,每一层都有自己的接口,并通过依赖注入实现了层之间的解耦。

层之间的注入关系:

graph TD
    A[main.go]
    A --> B[controller]
    A --> C[service]
    A --> D[dao]

    subgraph B[controller]
        B1[JwtAuthorizationServiceServer]
        B2[UserController]

        B1Impl[JwtAuthorizationServiceServerImpl]
        B2Impl[UserControllerImpl]

        B1 --> B1Impl
        B2 --> B2Impl
    end

    subgraph C[service]
        C1[UserService]

        C1Impl[UserServiceImpl]

        C1 --> C1Impl
    end

    subgraph D[dao]
        D1[UserDAO]

        D1Impl[UserDAOImpl]

        D1 --> D1Impl
    end

    B1Impl --> C1
    B2Impl --> C1
    C1Impl --> D1
Loading
  • main.go:项目的入口文件,负责初始化和依赖注入。
  • controller层包含两个接口JwtAuthorizationServiceServer和UserController,以及它们的实现JwtAuthorizationServiceServerImpl和UserControllerImpl。
  • service层包含接口UserService及其实现UserServiceImpl。
  • dao层包含接口UserDAO及其实现UserDAOImpl。
  • JwtAuthorizationServiceServerImpl和UserControllerImpl依赖于UserService。
  • UserServiceImpl依赖于UserDAO。

项目结构

.
├── README.md
├── README_zh.md
├── code
│   └── code.go
├── config
│   └── config.go
├── config.json
├── docs
│   └── JWT.postman_collection.json
├── go.mod
├── go.sum
├── internal
│   ├── controller
│   │   ├── gRPCController
│   │   │   └── gRPCInterface.go
│   │   └── httpController
│   │       ├── contextKey.go
│   │       ├── controllerInterface.go
│   │       ├── deleteUser.go
│   │       ├── frozen.go
│   │       ├── getUserID.go
│   │       ├── login.go
│   │       ├── logout.go
│   │       ├── permission.go
│   │       ├── refreshToken.go
│   │       ├── register.go
│   │       └── response.go
│   ├── dao
│   │   ├── daoInterface.go
│   │   ├── token.go
│   │   └── user.go
│   └── service
│       ├── EncryptPassword.go
│       ├── deleteUser.go
│       ├── frozen.go
│       ├── login.go
│       ├── logout.go
│       ├── permission.go
│       ├── refreshToken.go
│       ├── register.go
│       └── serviceInterface.go
├── main.go
├── middleware
│   ├── adminMiddleware.go
│   ├── gRPCJWTmiddleware.go
│   └── jwtMiddleware.go
├── model
│   ├── apiError.go
│   ├── token.go
│   └── user.go
├── proto
│   ├── jwt_authorization.pb.go
│   ├── jwt_authorization.proto
│   └── jwt_authorization_grpc.pb.go
├── route
│   └── route.go
└── util
    ├── MySQL
    │   └── MySQL.go
    ├── Redis
    │   └── Redis.go
    ├── initSQL.go
    └── jwt
        └── jwt.go

18 directories, 47 files

项目配置

需要编写config.json并且放在项目根目录下 config.json格式:

{
  "address":"127.0.0.1",
  "port": 8080,
  "MySQL": {
    "host": "127.0.0.1",
    "port": 3306,
    "username": "admin",
    "password": "admin",
    "database": "database"
  },
  "Redis": {
    "host": "127.0.0.1",
    "port": 6379,
    "username": "admin",
    "password": "admin",
    "database": 0
  },
  "JWT": {
    "secret": "secret"
  },
  "gRPC": {
    "host": "127.0.0.1",
    "port": 50051
  },
  "passwordSecret": "passwordSecret"
}

项目启动

终端执行下列指令:

go run main.go

项目接口:

http Postman json

gRPC proto

状态码

Error Code Description
1000 Success
1001 RequestTimeout
1002 ServerBusy
1003 LoginParamsError
1004 LoginGetUserInformationError
1005 LoginPasswordError
1006 LoginGenerateTokenError
1007 LoginUserIsFrozen
1008 LoginUserNotFound
1009 RegisterParamsError
1010 RegisterCheckUserExistsError
1011 RegisterUsernameExists
1012 RegisterTelephoneExists
1013 RegisterCreateUserError
1014 RequestUnauthorized
1015 RefreshTokenError
1016 FrozenUserIDRequired
1017 FrozenUserError
1018 ThawUserIDRequired
1019 ThawUserError
1020 DeleteUserError

About

A demo project for user authentication and authorization control using JWT, MySQL, Redis and gRPC technology stack. The project provides HTTP API and gRPC API

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages