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,用户将能够执行以下操作:
注册一个新帐户
使用注册的凭据登录
过期时刷新访问令牌
仅在经过身份验证后获取配置文件信息
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