修正了登录
This commit is contained in:
parent
d41f2399ad
commit
85b01f9002
@ -17,10 +17,10 @@ import (
|
|||||||
|
|
||||||
type Login struct{}
|
type Login struct{}
|
||||||
|
|
||||||
// LoginPhone 手机号登录
|
// Login 登录
|
||||||
func (r *Login) LoginPhone(c *gin.Context) {
|
func (r *Login) Login(c *gin.Context) {
|
||||||
loginRequest := requests.LoginRequest{}
|
loginRequest := requests.LoginRequest{}
|
||||||
req := loginRequest.LoginPhone
|
req := loginRequest.Login
|
||||||
if err := c.ShouldBind(&req); err != nil {
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
responses.FailWithMessage(err.Error(), c)
|
responses.FailWithMessage(err.Error(), c)
|
||||||
return
|
return
|
||||||
@ -32,20 +32,6 @@ func (r *Login) LoginPhone(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测验证码
|
|
||||||
if config.C.Env != "dev" {
|
|
||||||
code, _ := global.Redis.Get(c, "login_code_count_"+req.Mobile).Result()
|
|
||||||
if code == "" {
|
|
||||||
responses.FailWithMessage("验证码失效", c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if req.Code != code {
|
|
||||||
responses.FailWithMessage("验证码错误", c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始事务
|
// 开始事务
|
||||||
tx := global.Db.Begin()
|
tx := global.Db.Begin()
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -65,21 +51,44 @@ func (r *Login) LoginPhone(c *gin.Context) {
|
|||||||
user, _ := userDao.GetUser(maps)
|
user, _ := userDao.GetUser(maps)
|
||||||
// 新用户处理方式
|
// 新用户处理方式
|
||||||
if user == nil {
|
if user == nil {
|
||||||
|
// 检测验证码
|
||||||
|
if config.C.Env != "dev" {
|
||||||
|
code, _ := global.Redis.Get(c, "login_code_count_"+req.Mobile).Result()
|
||||||
|
if code == "" {
|
||||||
|
responses.FailWithMessage("验证码失效", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Code != code {
|
||||||
|
responses.FailWithMessage("验证码错误", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 登录ip
|
// 登录ip
|
||||||
publicService := service.PublicService{}
|
publicService := service.PublicService{}
|
||||||
loginIp := publicService.GetUserIP(c.Request)
|
loginIp := publicService.GetUserIP(c.Request)
|
||||||
|
|
||||||
|
// 处理用户头像
|
||||||
|
userService := service.UserService{}
|
||||||
|
avatarOssPath, err := userService.HandleUserImage(req.HeadImgUrl)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 新增用户
|
// 新增用户
|
||||||
user = &model.User{
|
user = &model.User{
|
||||||
UserName: "",
|
UserName: req.Nickname,
|
||||||
AppIden: "",
|
AppIden: "",
|
||||||
Mobile: req.Mobile,
|
Mobile: req.Mobile,
|
||||||
RegisterSource: req.Source,
|
RegisterSource: req.Source,
|
||||||
OpenId: "",
|
OpenId: req.OpenId,
|
||||||
UnionId: "",
|
UnionId: req.UnionId,
|
||||||
Age: nil,
|
Age: nil,
|
||||||
Sex: nil,
|
Sex: nil,
|
||||||
Avatar: "",
|
Avatar: avatarOssPath,
|
||||||
IsMember: 0,
|
IsMember: 0,
|
||||||
MemberExpireDate: nil,
|
MemberExpireDate: nil,
|
||||||
LoginIp: loginIp,
|
LoginIp: loginIp,
|
||||||
@ -130,7 +139,7 @@ func (r *Login) LoginPhone(c *gin.Context) {
|
|||||||
|
|
||||||
// 处理app用户数据
|
// 处理app用户数据
|
||||||
userService := service.UserService{}
|
userService := service.UserService{}
|
||||||
err = userService.HandleAppUserInfo(tx, user, userInfo)
|
err = userService.GetAppUserInfo(tx, user, userInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
responses.FailWithMessage(err.Error(), c)
|
responses.FailWithMessage(err.Error(), c)
|
||||||
@ -138,7 +147,7 @@ func (r *Login) LoginPhone(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 处理app用户病例数据
|
// 处理app用户病例数据
|
||||||
err = userService.HandleAppUserCase(tx, user)
|
err = userService.GetAppUserCase(tx, user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
tx.Rollback()
|
||||||
responses.FailWithMessage(err.Error(), c)
|
responses.FailWithMessage(err.Error(), c)
|
||||||
@ -167,140 +176,3 @@ func (r *Login) LoginPhone(c *gin.Context) {
|
|||||||
|
|
||||||
responses.OkWithData(g, c)
|
responses.OkWithData(g, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoginWx 微信授权登录
|
|
||||||
func (r *Login) LoginWx(c *gin.Context) {
|
|
||||||
loginRequest := requests.LoginRequest{}
|
|
||||||
req := loginRequest.LoginWx
|
|
||||||
if err := c.ShouldBind(&req); err != nil {
|
|
||||||
responses.FailWithMessage(err.Error(), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 参数验证
|
|
||||||
if err := global.Validate.Struct(req); err != nil {
|
|
||||||
responses.FailWithMessage(utils.Translate(err), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 开始事务
|
|
||||||
tx := global.Db.Begin()
|
|
||||||
defer func() {
|
|
||||||
if r := recover(); r != nil {
|
|
||||||
fmt.Println(r)
|
|
||||||
tx.Rollback()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
var userInfo *model.UserInfo
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// 检测用户信息
|
|
||||||
userDao := dao.UserDao{}
|
|
||||||
maps := make(map[string]interface{})
|
|
||||||
maps["mobile"] = req.Mobile
|
|
||||||
user, _ := userDao.GetUser(maps)
|
|
||||||
// 新用户处理方式
|
|
||||||
if user == nil {
|
|
||||||
// 登录ip
|
|
||||||
publicService := service.PublicService{}
|
|
||||||
loginIp := publicService.GetUserIP(c.Request)
|
|
||||||
|
|
||||||
// 处理用户头像
|
|
||||||
userService := service.UserService{}
|
|
||||||
avatarOssPath, err := userService.HandleUserImage(req.HeadImgUrl)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
responses.FailWithMessage(err.Error(), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 新增用户
|
|
||||||
user = &model.User{
|
|
||||||
UserName: "",
|
|
||||||
AppIden: "",
|
|
||||||
Mobile: req.Mobile,
|
|
||||||
RegisterSource: 2,
|
|
||||||
OpenId: req.OpenId,
|
|
||||||
UnionId: req.UnionId,
|
|
||||||
Age: nil,
|
|
||||||
Sex: nil,
|
|
||||||
Avatar: avatarOssPath,
|
|
||||||
IsMember: 0,
|
|
||||||
MemberExpireDate: nil,
|
|
||||||
LoginIp: loginIp,
|
|
||||||
}
|
|
||||||
loginAt := model.LocalTime(time.Now())
|
|
||||||
user.LoginAt = &loginAt
|
|
||||||
|
|
||||||
user, err = userDao.AddUser(tx, user)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
responses.FailWithMessage(err.Error(), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 新增用户详情
|
|
||||||
userInfo = &model.UserInfo{
|
|
||||||
UserId: user.UserId,
|
|
||||||
Height: "",
|
|
||||||
Weight: "",
|
|
||||||
NationId: nil,
|
|
||||||
IsFamilyHistory: nil,
|
|
||||||
IsPregnant: nil,
|
|
||||||
ExpectedDate: nil,
|
|
||||||
ProvinceId: nil,
|
|
||||||
Province: "",
|
|
||||||
CityId: nil,
|
|
||||||
City: "",
|
|
||||||
CountyId: nil,
|
|
||||||
County: "",
|
|
||||||
}
|
|
||||||
userInfoDao := dao.UserInfoDao{}
|
|
||||||
userInfo, err = userInfoDao.AddUserInfo(tx, userInfo)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
responses.FailWithMessage(err.Error(), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理app用户数据
|
|
||||||
userService := service.UserService{}
|
|
||||||
err = userService.HandleAppUserInfo(tx, user, userInfo)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
responses.FailWithMessage(err.Error(), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理app用户病例数据
|
|
||||||
err = userService.HandleAppUserCase(tx, user)
|
|
||||||
if err != nil {
|
|
||||||
tx.Rollback()
|
|
||||||
responses.FailWithMessage(err.Error(), c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
tx.Commit()
|
|
||||||
|
|
||||||
// 下发token
|
|
||||||
token := &utils.Token{
|
|
||||||
UserId: fmt.Sprintf("%d", user.UserId),
|
|
||||||
}
|
|
||||||
|
|
||||||
// 生成jwt
|
|
||||||
jwt, err := token.NewJWT()
|
|
||||||
if err != nil || jwt == "" {
|
|
||||||
responses.FailWithMessage("登陆失败", c)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理返回值
|
|
||||||
g := dto.LoginWxDto(user)
|
|
||||||
|
|
||||||
// 加载token
|
|
||||||
g.LoadToken(jwt)
|
|
||||||
|
|
||||||
responses.OkWithData(g, c)
|
|
||||||
}
|
|
||||||
|
|||||||
@ -85,3 +85,122 @@ func (r *User) PutUser(c *gin.Context) {
|
|||||||
|
|
||||||
responses.Ok(c)
|
responses.Ok(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PutBindUserName 绑定用户数据-昵称
|
||||||
|
func (r *User) PutBindUserName(c *gin.Context) {
|
||||||
|
userRequest := requests.UserRequest{}
|
||||||
|
req := userRequest.PutBindUserName
|
||||||
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数验证
|
||||||
|
if err := global.Validate.Struct(req); err != nil {
|
||||||
|
responses.FailWithMessage(utils.Translate(err), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Nickname == "" {
|
||||||
|
responses.FailWithMessage("参数错误", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userId := c.GetInt64("UserId")
|
||||||
|
|
||||||
|
// 获取用户数据
|
||||||
|
userDao := dao.UserDao{}
|
||||||
|
user, err := userDao.GetUserById(userId)
|
||||||
|
if err != nil {
|
||||||
|
responses.FailWithMessage("用户数据错误", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.UserName != "" {
|
||||||
|
responses.Ok(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userData := make(map[string]interface{})
|
||||||
|
userData["user_name"] = req.Nickname
|
||||||
|
|
||||||
|
// 开始事务
|
||||||
|
tx := global.Db.Begin()
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = userDao.EditUserById(tx, user.UserId, userData)
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.Commit()
|
||||||
|
responses.Ok(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserCheck 检测用户数据绑定状态
|
||||||
|
func (r *User) GetUserCheck(c *gin.Context) {
|
||||||
|
userRequest := requests.UserRequest{}
|
||||||
|
req := userRequest.GetUserCheck
|
||||||
|
if err := c.ShouldBind(&req); err != nil {
|
||||||
|
responses.FailWithMessage(err.Error(), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 参数验证
|
||||||
|
if err := global.Validate.Struct(req); err != nil {
|
||||||
|
responses.FailWithMessage(utils.Translate(err), c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Mobile == "" && req.OpenId == "" {
|
||||||
|
responses.FailWithMessage("缺少参数", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
g := &dto.UserCheckDto{}
|
||||||
|
|
||||||
|
// 获取用户数据
|
||||||
|
maps := make(map[string]interface{})
|
||||||
|
if req.OpenId != "" {
|
||||||
|
maps["open_id"] = req.OpenId
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.Mobile != "" {
|
||||||
|
maps["mobile"] = req.Mobile
|
||||||
|
}
|
||||||
|
|
||||||
|
userDao := dao.UserDao{}
|
||||||
|
user, err := userDao.GetUser(maps)
|
||||||
|
if err != nil || user == nil {
|
||||||
|
g.WxStatus = 0
|
||||||
|
g.MobileStatus = 0
|
||||||
|
g.NameStatus = 0
|
||||||
|
responses.OkWithData(g, c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.UserStatus == 2 {
|
||||||
|
responses.FailWithMessage("用户已禁用", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.UserName != "" {
|
||||||
|
g.NameStatus = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.Mobile != "" {
|
||||||
|
g.MobileStatus = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.OpenId != "" {
|
||||||
|
g.WxStatus = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
responses.OkWithData(g, c)
|
||||||
|
}
|
||||||
|
|||||||
@ -28,6 +28,13 @@ type UserDto struct {
|
|||||||
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
|
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UserCheckDto 检测用户
|
||||||
|
type UserCheckDto struct {
|
||||||
|
WxStatus int `json:"wx_status"` // 微信绑定状态(0:否 1:是)
|
||||||
|
MobileStatus int `json:"mobile_status"` // 手机号绑定状态(0:否 1:是)
|
||||||
|
NameStatus int `json:"name_status"` // 昵称填写状态(0:否 1:是)
|
||||||
|
}
|
||||||
|
|
||||||
// GetUserDto 详情-问题
|
// GetUserDto 详情-问题
|
||||||
func GetUserDto(m *model.User) *UserDto {
|
func GetUserDto(m *model.User) *UserDto {
|
||||||
return &UserDto{
|
return &UserDto{
|
||||||
|
|||||||
@ -1,22 +1,16 @@
|
|||||||
package requests
|
package requests
|
||||||
|
|
||||||
type LoginRequest struct {
|
type LoginRequest struct {
|
||||||
LoginWx // 微信授权登录
|
Login // 登录
|
||||||
LoginPhone // 手机号登录
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoginWx 微信授权登录
|
// Login 登录
|
||||||
type LoginWx struct {
|
type Login struct {
|
||||||
Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"`
|
Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"`
|
||||||
OpenId string `json:"openid" form:"openid" label:"openid"`
|
Code string `json:"code" form:"code" label:"验证码"`
|
||||||
|
Source int `json:"source" form:"source" label:"来源" validate:"required"` // (1:app 2:公众号
|
||||||
|
OpenId string `json:"openid" form:"openid" label:"openid" validate:"required"`
|
||||||
Nickname string `json:"nickname" form:"nickname" label:"用户昵称"`
|
Nickname string `json:"nickname" form:"nickname" label:"用户昵称"`
|
||||||
HeadImgUrl string `json:"headimgurl" form:"headimgurl" label:"头像"`
|
HeadImgUrl string `json:"headimgurl" form:"headimgurl" label:"头像"`
|
||||||
UnionId string `json:"unionid" form:"unionid" label:"unionid"`
|
UnionId string `json:"unionid" form:"unionid" label:"unionid"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoginPhone 手机号登录
|
|
||||||
type LoginPhone struct {
|
|
||||||
Mobile string `json:"mobile" form:"mobile" label:"手机号" validate:"required"`
|
|
||||||
Code string `json:"code" form:"code" label:"验证码" validate:"required"`
|
|
||||||
Source int `json:"source" form:"source" label:"来源" validate:"required"` // (1:app 2:公众号
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package requests
|
package requests
|
||||||
|
|
||||||
type UserRequest struct {
|
type UserRequest struct {
|
||||||
PutUser // 修改用户数据-基本信息
|
PutUser // 修改用户数据-基本信息
|
||||||
|
PutBindUserName // 绑定用户数据-昵称
|
||||||
|
GetUserCheck // 检测用户数据绑定状态
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutUser 修改用户数据-基本信息
|
// PutUser 修改用户数据-基本信息
|
||||||
@ -20,3 +22,14 @@ type PutUser struct {
|
|||||||
CityId string `json:"city_id" form:"city_id" label:"城市id" validate:"required"` // 从int转换为可选字符串
|
CityId string `json:"city_id" form:"city_id" label:"城市id" validate:"required"` // 从int转换为可选字符串
|
||||||
CountyId string `json:"county_id" form:"county_id" label:"区县id" validate:"required"` // 从int转换为可选字符串
|
CountyId string `json:"county_id" form:"county_id" label:"区县id" validate:"required"` // 从int转换为可选字符串
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PutBindUserName 绑定用户数据-昵称
|
||||||
|
type PutBindUserName struct {
|
||||||
|
Nickname string `json:"nickname" form:"nickname" label:"用户昵称"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserCheck 检测用户数据绑定状态
|
||||||
|
type GetUserCheck struct {
|
||||||
|
Mobile string `json:"mobile" form:"mobile" label:"mobile"`
|
||||||
|
OpenId string `json:"openid" form:"openid" label:"openid"`
|
||||||
|
}
|
||||||
|
|||||||
@ -75,11 +75,15 @@ func publicRouter(r *gin.Engine, api controller.Api) {
|
|||||||
// 登陆
|
// 登陆
|
||||||
loginGroup := r.Group("/login")
|
loginGroup := r.Group("/login")
|
||||||
{
|
{
|
||||||
// 手机号登录
|
// 登录
|
||||||
loginGroup.POST("/phone", api.Login.LoginPhone)
|
loginGroup.POST("", api.Login.Login)
|
||||||
|
}
|
||||||
|
|
||||||
// 微信授权登录
|
// 用户
|
||||||
loginGroup.POST("/wx", api.Login.LoginWx)
|
centerGroup := r.Group("/user")
|
||||||
|
{
|
||||||
|
// 检测用户数据绑定状态
|
||||||
|
centerGroup.GET("/check", api.User.GetUserCheck)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证码
|
// 验证码
|
||||||
|
|||||||
@ -158,8 +158,8 @@ func (r *UserService) AddUserMemberBuyCount(tx *gorm.DB, userId int64) (bool, er
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleAppUserInfo 处理app用户数据
|
// GetAppUserInfo 查询app用户数据
|
||||||
func (r *UserService) HandleAppUserInfo(tx *gorm.DB, user *model.User, userInfo *model.UserInfo) error {
|
func (r *UserService) GetAppUserInfo(tx *gorm.DB, user *model.User, userInfo *model.UserInfo) error {
|
||||||
appUserInfo, err := app.GetInfoByMobile(user.Mobile)
|
appUserInfo, err := app.GetInfoByMobile(user.Mobile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -424,8 +424,8 @@ func (r *UserService) HandleAppUserInfo(tx *gorm.DB, user *model.User, userInfo
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleAppUserCase 处理app用户病例数据
|
// GetAppUserCase 查询app用户病例数据
|
||||||
func (r *UserService) HandleAppUserCase(tx *gorm.DB, user *model.User) error {
|
func (r *UserService) GetAppUserCase(tx *gorm.DB, user *model.User) error {
|
||||||
appUserCase, err := app.GetUserCaseByAppIden(user.AppIden)
|
appUserCase, err := app.GetUserCaseByAppIden(user.AppIden)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user