密码加密

密码加密用到了一个go内置的包crypto,不需要安装,官网地址在这里,代码也很简单,通过使用GORM的钩子函数,可以直接进行哈希,同样的,在models/User.go下:

// 密码加密
func ScryptPw(password string) string {
	const cost = 10
	HashPw, err := bcrypt.GenerateFromPassword([]byte(password), cost)
	if err != nil {
		log.Fatal(err)
	}
	return string(HashPw)
}

// BeforeCreate 密码加密&权限控制
func (u *User) BeforeCreate(_ *gorm.DB) (err error) {
	u.Password = ScryptPw(u.Password)
	u.Role = 2
	return nil
}

分类CURD

直接复用代码即可,没啥难度,就不放轮子了。

文章CURD

同样的,复用代码,只是在查询时,需要用到外键的关联查询。

// 分类下所有文章
func GetCateArt(cid int, Size int, Page int)([]Article, int){
	var cateArtList []Article
	err = db.Preload("Category").Limit(Size).Offset((Page - 1) * Size).Where("cid=?", cid).Find(&cateArtList).Error
	if err != nil{
		return nil,errmsg.ERROR_CATE_NOT_EXIST
	}
	return cateArtList, errmsg.SUCCSE

}

// 单个文章
func ArticleInfo(id int) (Article, int) {
	var art Article
	err = db.Preload("Category").Where("id=?",id).First(&art).Error
	if err != nil{
		return art, errmsg.ERROR_ART_NOT_EXIST
	}
	return art, errmsg.SUCCSE
}

大部分都是重复的代码,改一下结构体即可,这个应该没啥难度,就不放一大堆无效代码了。

未完待续….