package login import ( "context" "git.apinb.com/bsm-sdk/core/errcode" "git.apinb.com/bsm-sdk/core/print" _vars "git.apinb.com/bsm-sdk/core/vars" "git.apinb.com/bsm-sdk/sample/internal/impl" "git.apinb.com/bsm-sdk/sample/internal/logic/common" "git.apinb.com/bsm-sdk/sample/internal/models" "git.apinb.com/bsm-sdk/sample/internal/vars" pb "git.apinb.com/bsm-sdk/sample/pb" "golang.org/x/crypto/bcrypt" ) // 通过密码登录 func Pwd(ctx context.Context, in *pb.LoginByPwdRequest) (reply *pb.LoginReply, err error) { if in.Account == "" || in.Password == "" { return nil, errcode.ErrInvalidArgument } pa, err := models.GetsampleAccountByField("account", in.Account) if err != nil { return nil, err } if pa.Status == vars.Status_Disable { return nil, errcode.ErrPermissionDenied } err = bcrypt.CompareHashAndPassword([]byte(pa.Password), []byte(in.Password+pa.Salt)) if err != nil { return nil, errcode.NewError(187, "sample Error") } extend := map[string]string{ "rights": pa.Rights, } token, err := common.GenerateTokenAes(uint(pa.ID), pa.Identity, "", pa.Rights, extend) if err != nil { return nil, err } //save token to cache. err = impl.RedisService.Client.Set(impl.RedisService.Ctx, vars.TokenPrefix+pa.Identity, token, _vars.JwtExpire).Err() if err != nil { print.Error("Set redis cache by key %v error:%v", vars.TokenPrefix+pa.Identity, err) return nil, errcode.ErrInternal } return &pb.LoginReply{ Id: int64(pa.ID), Identity: pa.Identity, Token: token, }, nil }