package model import ( "context" "errors" "fmt" "icloudapp.cn/tools/entity" _ "icloudapp.cn/tools/repository/mysql" "icloudapp.cn/tools/service" "icloudapp.cn/tools/util" "time" ) type User struct { ctx context.Context } func NewUser(ctx context.Context) *User { return &User{ctx} } // Login 用户名 密码登录 func (u *User) Login(username, password string) (entity.Login, error) { var login entity.Login sUser := service.NewUser(u.ctx) userInfo, err := sUser.UserInfoByUsername(username) if err != nil { return login, err } signedPassword := util.Sign(password, userInfo.Salt) //密码对不上就返回空login if userInfo.Password != signedPassword { return login, errors.New("密码不匹配") } /*encodeStr := url.HttpBuildQuery(map[string]string{ "uid": strconv.FormatInt(userInfo.Uid, 10), "username": userInfo.Username, }) token, _ := util.EncryptWidthTime(encodeStr, setting.Conf.EncryptConfig.ExpireAt, setting.Conf.EncryptConfig.Key) */ token, _ := service.GenJWTToken(userInfo.Uid, userInfo.Username) login.Uid = userInfo.Uid login.Username = userInfo.Username login.Status = userInfo.Status login.Avatar = userInfo.Avatar login.Type = 1 login.Token = token login.Expire = time.Now().Add(service.JWTExpireDuration()).Unix() login.ExpiresAt = time.Unix(login.Expire, 0) return login, nil } // Register 通过用户名、密码或邮箱注册 func (u *User) Register(username, password, email string) (entity.UserInfo, error) { var register entity.User register.Username = username register.Salt = util.RandomNumberStr(4) register.Password = util.Sign(password, register.Salt) if email == "" { email = fmt.Sprintf("%s@travelzs.com", username) } register.Email = email register.Status = 1 register.CreateAt = time.Now() register.UpdateAt = time.Now() sUser := service.NewUser(u.ctx) return sUser.Register(register) } func (u *User) Info(uid int64) (entity.UserInfo, error) { sUser := service.NewUser(u.ctx) return sUser.UserInfoByID(uid) } // ChangePassword 通过uid修改密码 func (u *User) ChangePassword(uid int64, password string) (entity.UserInfo, error) { sUser := service.NewUser(u.ctx) salt := util.RandomNumberStr(4) password = util.Sign(password, salt) return sUser.ChangePassword(uid, password, salt) } // ChangeEmail 更新邮件地址 func (u *User) ChangeEmail(uid int64, email string) (entity.UserInfo, error) { sUser := service.NewUser(u.ctx) return sUser.ChangeEmail(uid, email) }