runningwater 6 місяців тому
батько
коміт
693dc0d21a
4 змінених файлів з 35 додано та 12 видалено
  1. 17 0
      app/models/user/user_hooks.go
  2. 15 9
      app/models/user/user_model.go
  3. 2 2
      gohub.http
  4. 1 1
      pkg/hash/hash.go

+ 17 - 0
app/models/user/user_hooks.go

@@ -0,0 +1,17 @@
+package user
+
+import (
+	"github.com/runningwater/gohub/pkg/hash"
+	"gorm.io/gorm"
+)
+
+// BeforeSave 回调方法
+func (u *User) BeforeSave(tx *gorm.DB) (err error) {
+
+	// 如果密码有变化
+	if !hash.BcryptIsHashed(u.Password) {
+		u.Password = hash.BcryptHash(u.Password)
+	}
+
+	return
+}

+ 15 - 9
app/models/user/user_model.go

@@ -2,23 +2,29 @@
 package user
 
 import (
-    "github.com/runningwater/gohub/app/models"
-    "github.com/runningwater/gohub/pkg/database"
+	"github.com/runningwater/gohub/app/models"
+	"github.com/runningwater/gohub/pkg/database"
+	"github.com/runningwater/gohub/pkg/hash"
 )
 
 // User 用户模型
 type User struct {
-    models.BaseModel
+	models.BaseModel
 
-    Name     string `json:"name,omitempty"`
-    Email    string `json:"-"`
-    Phone    string `json:"-"`
-    Password string `json:"-"`
+	Name     string `json:"name,omitempty"`
+	Email    string `json:"-"`
+	Phone    string `json:"-"`
+	Password string `json:"-"`
 
-    models.CommonTimestampsField
+	models.CommonTimestampsField
 }
 
 // Create 创建用户, 通过 User.ID 来判断是否创建成功
 func (u *User) Create() {
-    database.DB.Create(&u)
+	database.DB.Create(&u)
+}
+
+// ComparePassword 密码是否匹配
+func (u *User) ComparePassword(_password string) bool {
+	return hash.BcryptCheck(_password, u.Password)
 }

+ 2 - 2
gohub.http

@@ -55,9 +55,9 @@ POST {{base_url}}/v1/auth/signup/using-email HTTP/1.1
 Content-Type: application/json
 
 {
-    "name":"summer",
+    "name":"summer2",
     "password":"secret",
     "password_confirm":"secret",
     "verify_code": "123123",
-    "email": "summer@example.com"
+    "email": "summer@testing.com"
 }

+ 1 - 1
pkg/hash/hash.go

@@ -23,5 +23,5 @@ func BcryptCheck(password, hash string) bool {
 
 // BcryptIsHashed 检查密码是否已经被哈希
 func BcryptIsHashed(str string) bool {
-	return len(str) == 60 && str[0] == '$' && str[1] == '2'
+	return len(str) == 60
 }