第十一节:使用goctl-gin 搭建gin项目用户注册鉴权(下)

在aiwork/internal/logic/user.go中我们完成对应的登陆和创建接口

登陆实现:

func (l *user) Login(ctx context.Context, req *domain.LoginReq) (resp *domain.LoginResp, err error) {
    name, err := l.svcCtx.UserModel.FindByName(ctx, req.Name)
    if err != nil {
        return nil, err
    }
    if !encrypt.ValidatePasswordHash(req.Password, name.Password) {
        return nil, errors.New("密码错误")
    }
    now := time.Now().Unix()
    jwtToken, err := token.GetJwtToken(l.svcCtx.Config.Jwt.Secret, now, l.svcCtx.Config.Jwt.Expire, name.ID.Hex())
    if err != nil {
        return nil, err
    }
    resp = &domain.LoginResp{
        Id:           name.ID.Hex(),
        Name:         name.Name,
        Status:       name.Status,
        AccessExpire: l.svcCtx.Config.Jwt.Expire + now,
        AccessToken:  jwtToken,
    }
    return resp, nil
}

创建实现:

func (l *user) Create(ctx context.Context, req *domain.User) (err error) {
    //判断用户是否存在
    u, err := l.svcCtx.UserModel.FindByName(ctx, req.Name)
    if err != nil && err != model.ErrNotUser{
        return
    }
    if u != nil {
        return errors.New("用户已存在")
    }
    password := "123456"
    if len(req.Password) > 0 {
        password = req.Password
    }
    hash, err := encrypt.GenPasswordHash([]byte(password))
    if err != nil {
        return
    }
    err = l.svcCtx.UserModel.Insert(ctx, &model.User{
        Name:     req.Name,
        Password: string(hash),
    })
    if err != nil {
        return errors.New("添加错误:" + err.Error())
    }
    return nil
}

 

posted @ 2025-09-29 16:21  phpwyl  阅读(5)  评论(0)    收藏  举报