Skip to content

Commit 688d4a1

Browse files
authored
Unify password changing and invalidate auth tokens (#27625)
- Unify the password changing code - Invalidate existing auth tokens when changing passwords
1 parent f8b471a commit 688d4a1

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

models/auth/auth_token.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ func DeleteAuthTokenByID(ctx context.Context, id string) error {
5454
return err
5555
}
5656

57+
func DeleteAuthTokensByUserID(ctx context.Context, uid int64) error {
58+
_, err := db.GetEngine(ctx).Where(builder.Eq{"user_id": uid}).Delete(&AuthToken{})
59+
return err
60+
}
61+
5762
func DeleteExpiredAuthTokens(ctx context.Context) error {
5863
_, err := db.GetEngine(ctx).Where(builder.Lt{"expires_unix": timeutil.TimeStampNow()}).Delete(&AuthToken{})
5964
return err

services/user/delete.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ func deleteUser(ctx context.Context, u *user_model.User, purge bool) (err error)
187187
}
188188
// ***** END: ExternalLoginUser *****
189189

190+
if err := auth_model.DeleteAuthTokensByUserID(ctx, u.ID); err != nil {
191+
return fmt.Errorf("DeleteAuthTokensByUserID: %w", err)
192+
}
193+
190194
if _, err = db.DeleteByID[user_model.User](ctx, u.ID); err != nil {
191195
return fmt.Errorf("delete: %w", err)
192196
}

services/user/update.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ func UpdateAuth(ctx context.Context, u *user_model.User, opts *UpdateAuthOptions
183183
u.LoginName = opts.LoginName.Value()
184184
}
185185

186+
deleteAuthTokens := false
186187
if opts.Password.Has() && (u.IsLocal() || u.IsOAuth2()) {
187188
password := opts.Password.Value()
188189

@@ -199,6 +200,8 @@ func UpdateAuth(ctx context.Context, u *user_model.User, opts *UpdateAuthOptions
199200
if err := u.SetPassword(password); err != nil {
200201
return err
201202
}
203+
204+
deleteAuthTokens = true
202205
}
203206

204207
if opts.MustChangePassword.Has() {
@@ -208,5 +211,12 @@ func UpdateAuth(ctx context.Context, u *user_model.User, opts *UpdateAuthOptions
208211
u.ProhibitLogin = opts.ProhibitLogin.Value()
209212
}
210213

211-
return user_model.UpdateUserCols(ctx, u, "login_type", "login_source", "login_name", "passwd", "passwd_hash_algo", "salt", "must_change_password", "prohibit_login")
214+
if err := user_model.UpdateUserCols(ctx, u, "login_type", "login_source", "login_name", "passwd", "passwd_hash_algo", "salt", "must_change_password", "prohibit_login"); err != nil {
215+
return err
216+
}
217+
218+
if deleteAuthTokens {
219+
return auth_model.DeleteAuthTokensByUserID(ctx, u.ID)
220+
}
221+
return nil
212222
}

0 commit comments

Comments
 (0)