fix(core): Use JWT as reset password token (#6714)

* use jwt to reset password

* increase expiration time to 1d

* drop user id query string

* refactor

* use service instead of package in tests

* sqlite migration

* postgres migration

* mysql migration

* remove unused properties

* remove userId from FE

* fix test for users.api

* move migration to the common folder

* move type assertion to the jwt.service

* Add jwt secret as a readonly property

* use signData instead of sign in user.controller

* remove base class

* remove base class

* add tests
This commit is contained in:
Ricardo Espinoza
2023-07-24 17:40:17 -04:00
committed by GitHub
parent c2511a829c
commit 89f44021b9
19 changed files with 209 additions and 146 deletions

View File

@@ -75,23 +75,15 @@ export default defineComponent({
},
],
};
const token =
!this.$route.query.token || typeof this.$route.query.token !== 'string'
? null
: this.$route.query.token;
const userId =
!this.$route.query.userId || typeof this.$route.query.userId !== 'string'
? null
: this.$route.query.userId;
const token = this.getResetToken();
try {
if (!token) {
throw new Error(this.$locale.baseText('auth.changePassword.missingTokenError'));
}
if (!userId) {
throw new Error(this.$locale.baseText('auth.changePassword.missingUserIdError'));
}
await this.usersStore.validatePasswordToken({ token, userId });
await this.usersStore.validatePasswordToken({ token });
} catch (e) {
this.showMessage({
title: this.$locale.baseText('auth.changePassword.tokenValidationError'),
@@ -118,20 +110,18 @@ export default defineComponent({
this.password = e.value;
}
},
getResetToken(): string | null {
return !this.$route.query.token || typeof this.$route.query.token !== 'string'
? null
: this.$route.query.token;
},
async onSubmit() {
try {
this.loading = true;
const token =
!this.$route.query.token || typeof this.$route.query.token !== 'string'
? null
: this.$route.query.token;
const userId =
!this.$route.query.userId || typeof this.$route.query.userId !== 'string'
? null
: this.$route.query.userId;
const token = this.getResetToken();
if (token && userId) {
await this.usersStore.changePassword({ token, userId, password: this.password });
if (token) {
await this.usersStore.changePassword({ token, password: this.password });
this.showMessage({
type: 'success',