Gin 项目实战

1、项目设置

使用 Docker-compose 创建 MongoDB 和 Redis 数据库

  • docker-compose.yml

version: '3'
services:
  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    env_file:
      - ./app.env

    ports:
      - '6000:27017'
    volumes:
      - mongodb:/data/db

  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - '6379:6379'
    volumes:
      - redisDB:/data
volumes:
  mongodb:
  redisDB:
  • app.env

  • 启动

如何将 Golang App 连接到 Redis 和 MongoDB

  • config/default.go

定义一个结构,该结构将包含 app.env 文件中的所有变量并提供适当的值类型。

测试 Golang API

当前项目结构

2、JWT 身份验证和授权

使用此 Golang JSON Web Token 身份验证 API,用户将能够执行以下操作:

  • 注册一个新帐户

  • 使用注册的凭据登录

  • 过期时刷新访问令牌

  • 仅在经过身份验证后获取配置文件信息

资源
HTTP 方法
路由
描述

users

GET

/api/users/me

返回登录用户的信息

auth

POST

/api/auth/register

注册一个新用户

auth

POST

/api/auth/login

登录注册用户

auth

GET

/api/auth/refresh

刷新过期的访问令牌

auth

GET

/api/auth/logout

注销用户

1、 如何生成公钥和私钥

http://travistidwell.com/jsencrypt/demo/

  • app.env 添加

2、添加如下内容

  • config/default.go

3、创建用户模型

  • models/user.model.go

5、创建身份接口和用户接口

在典型的 Golang RESTful API 中,有控制器和服务。控制器不能直接访问数据库,而是调用服务来改变或查询数据库。

  • 1、身份认证接口

让我们定义一个 AuthService 指定 SignUpUser和SignInUser方法的接口

  • services/auth.service.go

  • 2、用户认证接口

定义一个UserService具有 FindUserById 和 FindUserByEmail 方法的接口,方法在后面

  • services/user.service.go

6、加密和解密用户密码

数据库存储的密码不可能是明文, 所以加密,这里定义两个函数进行加密和解密

  • utils/password.go

7、创建与数据库交互的服务

定义一个 SignUpUser 将由控制器调用以在数据库中创建新用户的服务。

  • 认证接口实现

我在结构中包含了 MongoDB Collection 结构和 context 包的 Context 接口,AuthServiceImpl以帮助我们对 MongoDB 数据库执行基本的 CRUD 操作。

然后我使用NewAuthService构造函数来实例化 MongoDB 集合结构和 Context 接口。此外,NewAuthService构造函数实现了AuthService我们上面定义的接口。

略......

身份验证中间件

Last updated