为了账号安全,请及时绑定邮箱和手机立即绑定

我正在尝试通过电子邮件查找记录

我正在尝试通过电子邮件查找记录

Go
拉丁的传说 2022-01-04 10:41:17
我有以下代码。处理程序func (authHandler *AuthHandler) Login(c *gin.Context) {    var user models.User    c.Bind(&user)    if &user == nil {        c.BindJSON(&user)    }    userObject, err := authHandler.userRepo.FindBy(        models.User{            Email: user.Email,        },    )    if err != nil {        c.JSON(401, gin.H{"_message": "User not found."})        return    }    passErr := bcrypt.CompareHashAndPassword([]byte(userObject.Password), []byte(user.Password))    if passErr != nil {        c.JSON(401, gin.H{"_message": "Password incorrect."})        return    }    token, err := services.CreateToken(userObject)    if err != nil {        c.JSON(401, gin.H{"_message": "Password incorrect."})        return    }    c.JSON(200, gin.H{"token": token, "user": gin.H{        "id":         &userObject.ID,        "first_name": &userObject.FirstName,        "last_name":  &userObject.LastName,        "email":      &userObject.Email,        "avatar":     &userObject.Avatar,        "location":   &userObject.Location,        "bg_img":     &userObject.BgImg,    }})}模型// user.gotype User struct {    ID        string `gorm:"primary_key:true"`    FirstName string `form:"first_name" json:"first_name,omitempty"`    LastName  string `form:"last_name" json:"last_name,omitempty"`    Password  string `form:"password" json:"password" bindind:"required"`    Email     string `gorm:"type:varchar(110);unique_index" form:"email" json:"email,omitempty" binding:"required"`    Location  string `form:"location" json:"location,omitempty"`    Avatar    string `form:"avatar" json:"avatar,omitempty"`    BgImg     string `form:"bg_img" json:"bg_img,omitempty"`    CreatedAt time.Time    UpdatedAt time.Time    DeletedAt time.Time}我试过以几种不同的方式进行查找,但没有运气。我每次都收到 401 响应,模型中的 fmt.Prinlnt(err) 显示record not found错误。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

所以事实证明我需要将该DeletedAt字段设置为空值。在幕后,GORM 会自动检查一个DeletedAt值。即SELECT * FROM users WHERE email = 'someone@gmail.com' AND deleted_at IS NULL。但是,我的DeletedAt字段被自动设置为空白日期,从技术上讲,这不是NULL.


我添加了一个结构...


type NullTime struct {

  time.Time

  Valid bool

}

然后更新了我的模型...


type User struct {

    ID        string `gorm:"primary_key:true"`

    FirstName string `form:"first_name" json:"first_name,omitempty"`

    LastName  string `form:"last_name" json:"last_name,omitempty"`

    Password  string `form:"password" json:"password" bindind:"required"`

    Email     string `gorm:"type:varchar(110);unique_index" form:"email" json:"email,omitempty" binding:"required"`

    Location  string `form:"location" json:"location,omitempty"`

    Avatar    string `form:"avatar" json:"avatar,omitempty"`

    BgImg     string `form:"bg_img" json:"bg_img,omitempty"`

    CreatedAt time.Time

    UpdatedAt time.Time

    DeletedAt NullTime

}


查看完整回答
反对 回复 2022-01-04
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

'gorm' 中的约定是在您的结构中包含基本模型。


// Base Model definition from gomodel.go

type Model struct {

  ID        uint `gorm:"primary_key"`

  CreatedAt time.Time

  UpdatedAt time.Time

  DeletedAt *time.Time

}


// Your struct

type User struct {

  gorm.Model

  Name string

}

如您所见,'gorm' 需要一个指针来处理 NULL 值。


查看完整回答
反对 回复 2022-01-04
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信