sample/internal/logic/account/set_password.go

53 lines
1.4 KiB
Go

package account
import (
"context"
"time"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/service"
"git.apinb.com/bsm-sdk/core/vars"
"git.apinb.com/bsm-sdk/sample/internal/impl"
"git.apinb.com/bsm-sdk/sample/internal/models"
pb "git.apinb.com/bsm-sdk/sample/pb"
"golang.org/x/crypto/bcrypt"
)
// 更新会员的密码
func SetPassword(ctx context.Context, in *pb.SetPasswordRequest) (reply *pb.StatusReply, err error) {
if in.OldPassword == "" || in.NewPassword == "" {
return nil, errcode.ErrInvalidArgument
}
auth, err := service.ParseMetaCtx(ctx, nil)
if err != nil {
return nil, err
}
pa, err := models.GetsampleAccountByField("id", auth.ID)
if err != nil {
return nil, err
}
err = bcrypt.CompareHashAndPassword([]byte(pa.Password), []byte(in.OldPassword+pa.Salt))
if err != nil {
return nil, errcode.NewError(187, "sample Error")
}
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(in.NewPassword+pa.Salt), bcrypt.MinCost)
if err != nil {
return nil, errcode.ErrInternal
}
err = impl.DBService.Model(&models.sampleAccount{}).Where("id = ? ", auth.ID).Update("password", string(hashedPassword)).Error
if err != nil {
print.Error("Update sample account password by id %+v error:%v", auth.ID, err)
return nil, errcode.ErrDB
}
return &pb.StatusReply{
Data: vars.OK,
Timeseq: time.Now().UnixNano(),
}, nil
}