You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.8 KiB
Go

1 month ago
package auth
import (
"cls/internal/domain/auth"
domainUser "cls/internal/domain/user"
middleware "cls/internal/infrastructure/middleware/auth"
"cls/pkg/logger"
"cls/pkg/xorm_engine"
"errors"
"fmt"
1 month ago
"xorm.io/builder"
)
type AuthRepositoryORM struct {
engine *xorm_engine.Engine
auth *middleware.AuthMiddleware
log logger.Logger
}
var _ auth.AuthRepository = (*AuthRepositoryORM)(nil)
func NewAuthRepositoryORM(db *xorm_engine.Engine, auth *middleware.AuthMiddleware, logger logger.New) auth.AuthRepository {
return &AuthRepositoryORM{
engine: db,
auth: auth,
log: logger("panoramic:persistence:auth"),
}
}
func (a AuthRepositoryORM) LoginByPassword(phone, password string) (string, error) {
u := &domainUser.User{}
has, err := a.engine.Where(builder.Eq{"phone": phone}).Get(u)
if err != nil {
a.log.Error(err)
return "", err
}
if !has {
a.log.Errorf("用户不存在")
return "", errors.New("")
}
if u.Password == "" {
return "", errors.New("请使用验证码登录")
}
if u.Password != password {
return "", errors.New("密码错误")
}
token, err := a.auth.GenerateUserToken(phone, u.Openid)
1 month ago
if err != nil {
a.log.Error(err.Error())
return "", err
}
return token, nil
}
func (a AuthRepositoryORM) LoginByCaptcha(phone, openid string) (string, error) {
1 month ago
u := &domainUser.User{}
has, err := a.engine.Where(builder.Eq{"phone": phone}.And(builder.Eq{"openid": openid})).Get(u)
1 month ago
if err != nil {
a.log.Error(err)
return "", err
}
if !has {
//注册用户
u.Phone = phone
u.GiftCount = 2
u.Status = 1
u.Openid = openid
1 month ago
_, err = a.engine.Insert(u)
if err != nil {
a.log.Error(err)
}
}
if u.Status == 0 {
return "", errors.New(fmt.Sprintf("用户【%d】禁止登录", u.Id))
}
token, err := a.auth.GenerateUserToken(phone, u.Openid)
1 month ago
if err != nil {
a.log.Error(err)
}
return token, nil
}