欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go-zero docker-compose 搭建課件服務(wù)(六):完善jwt鑒權(quán)和返回結(jié)構(gòu)

0、轉(zhuǎn)載

go-zero docker-compose 搭建課件服務(wù)(六):完善jwt鑒權(quán)和返回結(jié)構(gòu)

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計,宣城網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:宣城等地區(qū)。宣城做網(wǎng)站價格咨詢:18982081108

0.1源碼地址

https://github.com/liuyuede123/go-zero-courseware

1、用戶服務(wù)登錄接口生成jwt token

user/api/etc/user.yaml中增加用于生成jwt的secret和過期時間

...

Auth:
  AccessSecret: 38f9c7af24ff11edbe30ef81
  AccessExpire: 

user/api/internal/config/config.go增加配置參數(shù)

...

Auth struct {
		AccessSecret string
		AccessExpire int64
}

在之前編寫的登錄邏輯中增加獲取token的方法,并修改登錄邏輯

...

func (l *UserLoginLogic) UserLogin(req *types.LoginRequest) (resp *types.LoginResponse, err error) {
	login, err := l.svcCtx.UserRpc.Login(l.ctx, &userclient.LoginRequest{
		LoginName: req.LoginName,
		Password:  req.Password,
	})
	if err != nil {
		return nil, err
	}

	now := time.Now().Unix()
	login.Token, err = l.getJwtToken(l.svcCtx.Config.Auth.AccessSecret, now, l.svcCtx.Config.Auth.AccessExpire, int64(login.Id))
	if err != nil {
		return nil, status.Error(5000, err.Error())
	}
	return &types.LoginResponse{
		Id:    login.Id,
		Token: login.Token,
	}, nil
}

func (l *UserLoginLogic) getJwtToken(secretKey string, iat, seconds, userId int64) (string, error) {
	claims := make(jwt.MapClaims)
	claims["exp"] = iat + seconds
	claims["iat"] = iat
	claims["userId"] = userId
	token := jwt.New(jwt.SigningMethodHS256)
	token.Claims = claims
	return token.SignedString([]byte(secretKey))
}

2、用戶密碼加密

user/rpc/internal/logic/registerlogic.go修改代碼加密密碼

...

func (l *RegisterLogic) Register(in *user.RegisterRequest) (*user.RegisterResponse, error) {
	_, err := l.svcCtx.UserModel.FindOneByLoginName(l.ctx, in.LoginName)
	if err == nil {
		return nil, status.Error(5000, "登錄名已存在")
	}

	if err != model.ErrNotFound {
		return nil, status.Error(500, err.Error())
	}

	pwd, err := bcrypt.GenerateFromPassword([]byte(in.Password), bcrypt.DefaultCost)
	if err != nil {
		return nil, status.Error(500, err.Error())
	}
	newUser := model.User{
		LoginName: in.LoginName,
		Username:  in.Username,
		Sex:       in.Sex,
		Password:  string(pwd),
	}
	_, err = l.svcCtx.UserModel.Insert(l.ctx, &newUser)
	if err != nil {
		return nil, status.Error(500, err.Error())
	}

	return &user.RegisterResponse{}, nil
}

user/rpc/internal/logic/loginlogic.go 登錄邏輯修改密碼驗證

...

func (l *LoginLogic) Login(in *user.LoginRequest) (*user.LoginResponse, error) {
	userInfo, err := l.svcCtx.UserModel.FindOneByLoginName(l.ctx, in.LoginName)
	if err == model.ErrNotFound {
		return nil, status.Error(5000, "用戶不存在")
	}
	if err != nil {
		return nil, status.Error(500, err.Error())
	}

	err = bcrypt.CompareHashAndPassword([]byte(userInfo.Password), []byte(in.Password))
	if err != nil {
		return nil, status.Error(5000, "密碼錯誤")
	}

	return &user.LoginResponse{
		Id:    userInfo.Id,
		Token: "a.b.c",
	}, nil
}

3、其他接口增加鑒權(quán)中間件

修改courseware/api/courseware.api增加鑒權(quán)中間件

...

@server (
	jwt : Auth
)
service courseware {
	@handler coursewareAdd
	post /api/courseware/add (AddRequest) returns (AddResponse)

	@handler coursewareUpdate
	post /api/courseware/update (UpdateRequest) returns (UpdateResponse)

	@handler coursewareGet
	post /api/courseware/get (GetRequest) returns (GetResponse)

	@handler coursewareDelete
	post /api/courseware/delete (DeleteRequest) returns (DeleteResponse)

courseware/api/etc/courseware.yaml課件api增加auth配置

...

Auth:
  AccessSecret: 38f9c7af24ff11edbe30ef81
  AccessExpire: 

courseware/api/internal/config/config.go增加auth配置

Auth struct {
		AccessSecret string
		AccessExpire int64
}

到courseware/api/目錄下重新生成路由文件

goctl api go -api courseware.api -dir . -style gozero

用戶服務(wù)獲取用戶信息接口需要增加權(quán)限校驗

修改user/api/user.api增加鑒權(quán)中間件

...

service user {
	@handler userLogin
	post /api/user/login (LoginRequest) returns (LoginResponse)

	@handler userRegister
	post /api/user/register (RegisterRequest) returns (RegisterResponse)
}

@server (
	jwt : Auth
)
service user {

	@handler userInfo
	post /api/user/userInfo (UserInfoRequest) returns (UserInfoResponse)
}

第一步已經(jīng)生成auth相關(guān)配置不需要重新設(shè)置,到user/api/目錄下更新路由

goctl api go -api user.api -dir . -style gozero

4、返回結(jié)構(gòu)優(yōu)化

課件api層新增courseware/api/response/response.go

package response

import (
	"github.com/zeromicro/go-zero/rest/httpx"
	"net/http"
)

type Body struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data,omitempty"`
}

func Response(w http.ResponseWriter, resp interface{}, err error) {
	var body Body
	if err != nil {
		body.Code = 5000
		body.Message = err.Error()
		body.Data = nil
	} else {
		body.Code = 0
		body.Message = "OK"
		body.Data = resp
	}
	httpx.OkJson(w, body)
}

handler中修改返回結(jié)構(gòu)

修改前

...

if err != nil {
			httpx.Error(w, err)
		} else {
			httpx.OkJson(w, resp)
		}

修改后

response.Response(w, resp, err)

用戶api服務(wù)重復(fù)上面的步驟...

分享題目:go-zero docker-compose 搭建課件服務(wù)(六):完善jwt鑒權(quán)和返回結(jié)構(gòu)
文章路徑:http://chinadenli.net/article12/dsoicdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、做網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)頁設(shè)計公司標(biāo)簽優(yōu)化、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)