update
This commit is contained in:
@@ -2,6 +2,7 @@ package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"management/internal/erpserver/model/dto"
|
||||
"management/internal/erpserver/model/system"
|
||||
@@ -63,3 +64,11 @@ func (s *loginLogService) LoginCount(ctx context.Context, email string) int64 {
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func (s *loginLogService) HistoricalLogin(ctx context.Context, email string, createdAt time.Time) ([]*system.LoginLog, error) {
|
||||
logs, err := s.repo.HistoricalLogin(ctx, email, createdAt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
@@ -136,6 +136,10 @@ func (s *userService) Get(ctx context.Context, id int32) (*system.User, error) {
|
||||
return s.repo.Get(ctx, id)
|
||||
}
|
||||
|
||||
func (s *userService) GetByEmail(ctx context.Context, email string) (*system.User, error) {
|
||||
return s.repo.GetByEmail(ctx, email)
|
||||
}
|
||||
|
||||
func (s *userService) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
|
||||
all, err := s.repo.All(ctx)
|
||||
if err != nil || len(all) == 0 {
|
||||
@@ -154,7 +158,7 @@ func (s *userService) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
|
||||
|
||||
func (s *userService) Login(ctx context.Context, req *form.Login) error {
|
||||
l := system.NewLoginLog(req.Email, req.Os, req.Ip, req.Browser, req.Url, req.Referrer)
|
||||
err := s.login(ctx, req)
|
||||
_, err := s.login(ctx, req)
|
||||
if err != nil {
|
||||
if err := s.loginLogService.Create(ctx, l.SetMessage(err.Error())); err != nil {
|
||||
s.Log.Error(err.Error(), err, zap.Any("login_log", l))
|
||||
@@ -168,36 +172,36 @@ func (s *userService) Login(ctx context.Context, req *form.Login) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *userService) login(ctx context.Context, req *form.Login) error {
|
||||
func (s *userService) login(ctx context.Context, req *form.Login) (*system.User, error) {
|
||||
user, err := s.repo.GetByEmail(ctx, req.Email)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = crypto.BcryptComparePassword(user.HashedPassword, req.Password+user.Salt)
|
||||
if err != nil {
|
||||
return errors.New("账号或密码错误")
|
||||
return nil, errors.New("账号或密码错误")
|
||||
}
|
||||
|
||||
user.Role, err = s.roleService.Get(ctx, user.RoleID)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
if user.Role == nil || user.Role.ID == 0 {
|
||||
return errors.New("账号没有配置角色, 请联系管理员")
|
||||
return nil, errors.New("账号没有配置角色, 请联系管理员")
|
||||
}
|
||||
|
||||
// 登陆成功
|
||||
err = s.loginSuccess(ctx, user, req)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil
|
||||
return user, nil
|
||||
}
|
||||
|
||||
func (s *userService) loginSuccess(ctx context.Context, user *system.User, req *form.Login) error {
|
||||
return s.Session.PutUser(ctx, know.StoreName, dto.AuthorizeUser{
|
||||
return s.Session.PutUser(ctx, know.StoreName, system.AuthorizeUser{
|
||||
ID: user.ID,
|
||||
Uuid: user.Uuid,
|
||||
Email: user.Email,
|
||||
|
||||
Reference in New Issue
Block a user