@@ -35,7 +35,7 @@ func init() {
35
35
gbeConfig = cfg
36
36
}
37
37
38
- func SignUp (email , password string ) (* models.User , error ) {
38
+ func CreateUser (email , password string ) (* models.User , error ) {
39
39
user , err := GetUserByEmail (email )
40
40
if err != nil {
41
41
return nil , err
@@ -48,11 +48,7 @@ func SignUp(email, password string) (*models.User, error) {
48
48
Email : email ,
49
49
PasswordHash : encryptPassword (password ),
50
50
}
51
- err = mysql .SharedStore ().AddUser (user )
52
- if err != nil {
53
- return nil , err
54
- }
55
- return user , nil
51
+ return user , mysql .SharedStore ().AddUser (user )
56
52
}
57
53
58
54
func RefreshAccessToken (email , password string ) (string , error ) {
@@ -68,9 +64,10 @@ func RefreshAccessToken(email, password string) (string, error) {
68
64
}
69
65
70
66
claim := jwt.MapClaims {
71
- "id" : user .Id ,
72
- "email" : user .Email ,
73
- "expiredAt" : time .Now ().Unix (),
67
+ "id" : user .Id ,
68
+ "email" : user .Email ,
69
+ "passwordHash" : user .PasswordHash ,
70
+ "expiredAt" : time .Now ().Unix (),
74
71
}
75
72
token := jwt .NewWithClaims (jwt .SigningMethodHS256 , claim )
76
73
return token .SignedString ([]byte (gbeConfig .JwtSecret ))
@@ -92,21 +89,48 @@ func CheckToken(tokenStr string) (*models.User, error) {
92
89
}
93
90
94
91
email := claim ["email" ].(string )
92
+ passwordHash := claim ["passwordHash" ].(string )
95
93
96
94
user , err := GetUserByEmail (email )
97
95
if err != nil {
98
96
return nil , err
99
97
}
100
98
if user == nil {
101
- return nil , errors .New ("bad token" )
99
+ return nil , errors .New ("bad token: 0x1" )
100
+ }
101
+ if user .PasswordHash != passwordHash {
102
+ return nil , errors .New ("bad token: 0x2" )
102
103
}
103
104
return user , nil
104
105
}
105
106
107
+ func ChangePassword (email , newPassword string ) error {
108
+ user , err := GetUserByEmail (email )
109
+ if err != nil {
110
+ return err
111
+ }
112
+ if user == nil {
113
+ return errors .New ("user not found" )
114
+ }
115
+ user .PasswordHash = encryptPassword (newPassword )
116
+ return mysql .SharedStore ().UpdateUser (user )
117
+ }
118
+
106
119
func GetUserByEmail (email string ) (* models.User , error ) {
107
120
return mysql .SharedStore ().GetUserByEmail (email )
108
121
}
109
122
123
+ func GetUserByPassword (email , password string ) (* models.User , error ) {
124
+ user , err := GetUserByEmail (email )
125
+ if err != nil {
126
+ return nil , err
127
+ }
128
+ if user == nil || user .PasswordHash != encryptPassword (password ) {
129
+ return nil , errors .New ("user not found or password incorrect" )
130
+ }
131
+ return user , nil
132
+ }
133
+
110
134
func encryptPassword (password string ) string {
111
135
hash := md5 .New ().Sum ([]byte (password ))
112
136
return fmt .Sprintf ("%x" , hash )
0 commit comments