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

我有以下代码。


处理程序


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.go

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 time.Time

}


我试过以几种不同的方式进行查找,但没有运气。我每次都收到 401 响应,模型中的 fmt.Prinlnt(err) 显示record not found错误。


拉丁的传说
浏览 178回答 2
2回答

白衣染霜花

所以事实证明我需要将该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}

MMMHUHU

'gorm' 中的约定是在您的结构中包含基本模型。// Base Model definition from gomodel.gotype Model struct {  ID        uint `gorm:"primary_key"`  CreatedAt time.Time  UpdatedAt time.Time  DeletedAt *time.Time}// Your structtype User struct {  gorm.Model  Name string}如您所见,'gorm' 需要一个指针来处理 NULL 值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go