代码拉取完成,页面将自动刷新
package user
import (
"gitee.com/aviptle/goclean/go11jin/vblog01/common"
"github.com/rs/xid"
"golang.org/x/crypto/bcrypt"
)
func NewToken(username string) *Token {
return &Token{
Meta: common.NewMate(),
Username: username,
// 随机字符串,没有任何含义
AccessToken: xid.New().String(),
}
}
type Token struct {
*common.Meta
// JWT
AccessToken string `json:"token"`
// 用户的名称
Username string `json:"username"`
}
func (t *Token) TableName() string {
return "tokens"
}
func NewDefaultUser() *User {
return NewUser(NewCreateUserRequest())
}
func NewUser(req *CreateUserRequest) *User {
return &User{
Meta: common.NewMate(),
CreateUserRequest: req,
}
}
type User struct {
*common.Meta
*CreateUserRequest
}
func (u *User) TableName() string {
return "users"
}
func (u *User) String() string {
return common.ToJSON(u)
}
// 将明文密码变成一个Hash
// 密码 ---> hash 是一一对应, 彩虹表: hash ---> pass
// 生成是很少这样方式的, 加盐
//
// password ---> bash
// salt.password --> salt.hash
// password + salt ---> salt.hash == salt/password
func (u *User) BuildHashedPassword() error {
// h := sha1.New()
// _, err := h.Write([]byte(u.Password))
// if err != nil {
// return err
// }
// hd := h.Sum(nil)
// // base64 编码, []byte是二进制数据, 不一定可以转换成字符串
// u.Password = base64.StdEncoding.EncodeToString(hd)
// 专门用户Password hash的方法
hp, err := bcrypt.GenerateFromPassword([]byte(u.Password), 10)
if err != nil {
return err
}
u.Password = string(hp)
return nil
}
func (u *User) CheckPassword(planPassword string) error {
return bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(planPassword))
}
func NewCreateUserRequest() *CreateUserRequest {
return &CreateUserRequest{}
}
type CreateUserRequest struct {
Username string `json:"username" validate:"required"`
Password string `json:"password" validate:"required"`
}
func (r *CreateUserRequest) Validate() error {
return common.Validate(r)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。