一步步实现微服务权限管理系统(4)
前言
- 前端参考了很多框架,可谓百花齐放,但很多封装过剩,不利于学习和应用,最终我选择了 [vue-pure-admin](https://github.com/pure-admin/vue-pure-admin)
- 后端我将使用 go-zero 来带领大家一步步实现一个权限管理系统
- 本系列项目存放在 purezeroadmin 中,每一部分我都将打tag,并保证每个tag能正常运行。请多点赞和评论。
- 后面示例均为
purezeroadmin
项目为例,你们可以根据需要自建工程来进行试验。均采用vscode
进行试验。 go-zero
常用命令我将放入其对应的makefile
文件中。
统一返回
- 参考 https://go-zero.dev/docs/tutorials/customization/template
- api返回一般采用以下返回
{
"code": 0,
"msg": "ok",
"data": {}
}
修改后端登陆模块支持验证和返回错误
修改登陆逻辑
在user-api/internal/logic/userloginlogic.go
修改
func (l *UserLoginLogic) UserLogin(req *types.UserLoginReq) (resp *types.UserLoginResp, err error) {
if req.UserName == "admin" && req.Password == "admin123" {
return &types.UserLoginResp{
Base: types.Base{
Success: true,
},
Data: types.UserLoginData{
Avatar: "https://avatars.githubusercontent.com/u/44761321",
Username: "admin",
Nickname: "小铭",
Roles: []string{"admin"},
Permissions: []string{"*:*:*"},
AccessToken: "eyJhbGciOiJIUzUxMiJ9.admin",
RefreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh",
Expires: "2030/10/30 00:00:00",
},
}, nil
}
if req.UserName == "common" && req.Password == "123456" {
return &types.UserLoginResp{
Base: types.Base{
Success: true,
},
Data: types.UserLoginData{
Avatar: "https://avatars.githubusercontent.com/u/52823142",
Username: "common",
Nickname: "小林",
Roles: []string{"common"},
Permissions: []string{"permission:btn:add", "permission:btn:edit"},
AccessToken: "eyJhbGciOiJIUzUxMiJ9.common",
RefreshToken: "eyJhbGciOiJIUzUxMiJ9.commonRefresh",
Expires: "2030/10/30 00:00:00",
},
}, nil
}
return nil, errors.New("登陆失败")
}
观测
curl 测试,返回不一致
❯ curl --request POST \
--url http://localhost:8888/api/login \
--header 'Content-Type: application/json' \
--data '{
"username": "admin",
"password": "admin123"
}'
{"success":true,"data":{"avatar":"https://avatars.githubusercontent.com/u/44761321","username":"admin","nickname":"小铭","roles":["admin"],"permissions":["*:*:*"],"accessToken":"eyJhbGciOiJIUzUxMiJ9.admin","refreshToken":"eyJhbGciOiJIUzUxMiJ9.adminRefresh","expires":"2030/10/30 00:00:00"}}#
curl --request POST \
--url http://localhost:8888/api/login \
--header 'Content-Type: application/json' \
--data '{
"username": "admin",
"password": "admin1234"
}'
登陆失败
修改user-api/internal/handler/userloginhandler.go
核心函数,支持统一返回
- 修改
// 用户登录
func userLoginHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UserLoginReq
if err := httpx.Parse(r, &req); err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
return
}
l := logic.NewUserLoginLogic(r.Context(), svcCtx)
resp, err := l.UserLogin(&req)
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}
完成后 go mod tidy
一下
- 测试
❯ curl --request POST \
--url http://localhost:8888/api/login\?debug \
--header 'Content-Type: application/json' \
--data '{
"username": "admin",
"password": "admin1234"
}'
{"code":-1,"msg":"登陆失败"}
tag版本
purezeroadmin
项目下
git checkout v1.3.0
接下来
- 模型修改不采用前端
{success: true, data: xx }
模式 - 统一前后端修改为
{code: 0, msg: "ok", data: xx}
模式