[forgot, reset pwd] + male doladovacky

This commit is contained in:
romankko2 committed 2023-03-28 23:07:22 +02:00
1 parent 92a5716ab9
commit ff2bd3979a
7 files changed
+46 -22

No files matched your search

@@ -1,9 +1,9 @@
<template> <template>
<v-form> <v-form @keydown.enter="submit()">
<v-text-field v-model="form.email" variant="solo" bg-color="white" :hint="v$.form.email.$errors ? errorUtils.parseErrors(v$.form.email.$errors) : null" :class="{ error: v$.form.email.$errors.length }" class="mb-2" label="E-mail" autocomplete="email" /> <v-text-field v-model="credentials.email" variant="solo" bg-color="white" :hint="v$.credentials.email.$errors ? errorUtils.parseErrors(v$.credentials.email.$errors) : null" :class="{ error: v$.credentials.email.$errors.length }" class="mb-2" label="E-mail" autocomplete="email" />
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<v-btn class="button" color="#7F39FB" @click="submit()">Send code</v-btn> <v-btn class="button" color="#7F39FB" @click.prevent="submit()">Send code</v-btn>
<p class="mt-5 text-center cursor-pointer" @click="$router.push({ name: 'Login' })">Did you remember your password? Log in</p> <p class="mt-5 text-center cursor-pointer" @click="$router.push({ name: 'Login' })">Did you remember your password? Log in</p>
</div> </div>
</v-form> </v-form>
@@ -15,18 +15,25 @@ import { required, email } from '@vuelidate/validators'
import errorUtils from '@/plugins/lib@auth/_utils/error.utils' import errorUtils from '@/plugins/lib@auth/_utils/error.utils'
export default { export default {
props: {
navigateToAfterForgotPassword: {
type: String,
required: true
}
},
data() { data() {
return { return {
errorUtils, errorUtils,
v$: useVuelidate(), v$: useVuelidate(),
form: {}, credentials: {},
showPassword: false showPassword: false
} }
}, },
validations() { validations() {
return { return {
form: { credentials: {
email: { required, email } email: { required, email }
} }
} }
@@ -37,8 +44,8 @@ export default {
if (!(await this.v$.$validate())) return if (!(await this.v$.$validate())) return
try { try {
await this.$axios.post_data('v1/auth/forgot', this.form) await this.$store.dispatch('auth/forgotPassword', this.credentials)
this.$router.push({ name: 'Reset password' }) this.$router.push(`${this.navigateToAfterForgotPassword}?email=${this.credentials.email}`)
} catch (error) { } catch (error) {
this.$toast.error(error) this.$toast.error(error)
} }
@@ -4,7 +4,7 @@
<h1>Forgotten password?</h1> <h1>Forgotten password?</h1>
<p class="mb-10">We will send you a confirmation code on your email with the instructions</p> <p class="mb-10">We will send you a confirmation code on your email with the instructions</p>
<A-forgot-password-form /> <A-forgot-password-form navigate-to-after-forgot-password="/auth/reset-password" />
</div> </div>
</v-container> </v-container>
</template> </template>
@@ -1,5 +1,5 @@
<template> <template>
<v-form> <v-form @keydown.enter="submit()">
<v-text-field v-model="form.email" label="E-mail" variant="solo" autocomplete="email" class="mb-2" bg-color="white" :hint="v$.form.email.$errors ? errorUtils.parseErrors(v$.form.email.$errors) : null" :class="{ error: v$.form.email.$errors.length }" /> <v-text-field v-model="form.email" label="E-mail" variant="solo" autocomplete="email" class="mb-2" bg-color="white" :hint="v$.form.email.$errors ? errorUtils.parseErrors(v$.form.email.$errors) : null" :class="{ error: v$.form.email.$errors.length }" />
<v-text-field v-model="form.password" :type="showPassword ? 'text' : 'password'" variant="solo" bg-color="white" class="mb-2" :counter="12" label="Heslo" autocomplete="current-password" :hint="v$.form.password.$errors ? errorUtils.parseErrors(v$.form.password.$errors) : null" <v-text-field v-model="form.password" :type="showPassword ? 'text' : 'password'" variant="solo" bg-color="white" class="mb-2" :counter="12" label="Heslo" autocomplete="current-password" :hint="v$.form.password.$errors ? errorUtils.parseErrors(v$.form.password.$errors) : null"
@@ -1,15 +1,15 @@
<template> <template>
<v-form> <v-form @keydown.enter="submit()">
<v-text-field v-model="form.code" label="Code" autocomplete="one-time-code" bg-color="white" variant="solo" type="number" class="mb-2" :hint="v$.form.code.$errors ? errorUtils.parseErrors(v$.form.code.$errors) : null" :counter="6" :class="{ error: v$.form.code.$errors.length }" /> <v-text-field v-model="credentials.code" label="Code" autocomplete="one-time-code" bg-color="white" variant="solo" type="number" class="mb-2" :hint="v$.credentials.code.$errors ? errorUtils.parseErrors(v$.credentials.code.$errors) : null" :counter="6" :class="{ error: v$.credentials.code.$errors.length }" />
<v-text-field v-model="form.email" label="E-mail" autocomplete="email" bg-color="white" variant="solo" type="email" class="mb-2" :hint="v$.form.email.$errors ? errorUtils.parseErrors(v$.form.email.$errors) : null" :class="{ error: v$.form.email.$errors.length }" /> <v-text-field v-model="credentials.email" label="E-mail" autocomplete="email" bg-color="white" variant="solo" type="email" class="mb-2" :hint="v$.credentials.email.$errors ? errorUtils.parseErrors(v$.credentials.email.$errors) : null" :class="{ error: v$.credentials.email.$errors.length }" />
<v-text-field v-model="form.password" label="Heslo" autocomplete="new-password" bg-color="white" variant="solo" :type="showPassword ? 'text' : 'password'" class="mb-2" :hint="v$.form.password.$errors ? errorUtils.parseErrors(v$.form.password.$errors) : null" :class="{ error: v$.form.password.$errors.length }" :counter="12" :append-icon="showPassword ? 'mdi-eye' : 'mdi-eye-off'" @click:append="showPassword = !showPassword" /> <v-text-field v-model="credentials.password" label="Heslo" autocomplete="new-password" bg-color="white" variant="solo" :type="showPassword ? 'text' : 'password'" class="mb-2" :hint="v$.credentials.password.$errors ? errorUtils.parseErrors(v$.credentials.password.$errors) : null" :class="{ error: v$.credentials.password.$errors.length }" :counter="12" :append-icon="showPassword ? 'mdi-eye' : 'mdi-eye-off'" @click:append="showPassword = !showPassword" />
<v-text-field v-model="form.password_confirmation" autocomplete="new-password" bg-color="white" variant="solo" label="Potvrdenie hesla" :type="showConfirmationPassword ? 'text' : 'password'" :counter="12" class="mb-2" :hint="v$.form.password_confirmation.$errors ? errorUtils.parseErrors(v$.form.password_confirmation.$errors) : null" :class="{ error: v$.form.password_confirmation.$errors.length }" :append-icon="showConfirmationPassword ? 'mdi-eye' : 'mdi-eye-off'" @click:append="showConfirmationPassword = !showConfirmationPassword" /> <v-text-field v-model="credentials.password_confirmation" autocomplete="new-password" bg-color="white" variant="solo" label="Potvrdenie hesla" :type="showConfirmationPassword ? 'text' : 'password'" :counter="12" class="mb-2" :hint="v$.credentials.password_confirmation.$errors ? errorUtils.parseErrors(v$.credentials.password_confirmation.$errors) : null" :class="{ error: v$.credentials.password_confirmation.$errors.length }" :append-icon="showConfirmationPassword ? 'mdi-eye' : 'mdi-eye-off'" @click:append="showConfirmationPassword = !showConfirmationPassword" />
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<v-btn class="button" color="#7F39FB" @click="submit()">Change password</v-btn> <v-btn class="button" color="#7F39FB" @click.prevent="submit()">Change password</v-btn>
</div> </div>
</v-form> </v-form>
</template> </template>
@@ -20,11 +20,23 @@ import { required, email, integer, minLength, maxLength, sameAs } from '@vuelida
import errorUtils from '@/plugins/lib@auth/_utils/error.utils' import errorUtils from '@/plugins/lib@auth/_utils/error.utils'
export default { export default {
props: {
navigateToAfterPasswordReset: {
type: String,
required: true
}
},
data() { data() {
return { return {
errorUtils, errorUtils,
v$: useVuelidate(), v$: useVuelidate(),
form: {}, credentials: {
code: '',
email: '',
password: '',
password_confirmation: ''
},
showPassword: false, showPassword: false,
showConfirmationPassword: false showConfirmationPassword: false
} }
@@ -32,7 +44,7 @@ export default {
validations() { validations() {
return { return {
form: { credentials: {
code: { required, integer, minLength: minLength(6), maxLength: maxLength(6) }, code: { required, integer, minLength: minLength(6), maxLength: maxLength(6) },
email: { required, email }, email: { required, email },
password: { required, minLength: minLength(12) }, password: { required, minLength: minLength(12) },
@@ -41,12 +53,17 @@ export default {
} }
}, },
created() {
this.credentials.email = new URLSearchParams(window.location.search.substring(1).get('email'))
this.credentials.code = new URLSearchParams(window.location.search.substring(1).get('code'))
},
methods: { methods: {
async submit() { async submit() {
if (!(await this.v$.$validate())) return if (!(await this.v$.$validate())) return
try { try {
await this.$axios.post_data('v1/auth/reset', this.form) await this.$store.dispatch('auth/resetPassword', this.credentials)
this.$router.push({ name: 'Login' }) this.$router.push({ name: 'Login' })
} catch (error) { } catch (error) {
this.$toast.error(error) this.$toast.error(error)
@@ -4,7 +4,7 @@
<h1>Reset password</h1> <h1>Reset password</h1>
<p class="mb-10">We have sent you a confirmation code on your email. You can insert him or continue with link in your email</p> <p class="mb-10">We have sent you a confirmation code on your email. You can insert him or continue with link in your email</p>
<A-reset-password-form /> <A-reset-password-form navigate-to-after-password-reset="/auth/login" />
</div> </div>
</v-container> </v-container>
</template> </template>
@@ -3,7 +3,7 @@
<W-loadable :content="subtask" class="h-100"> <W-loadable :content="subtask" class="h-100">
<v-card v-if="editMode" height="100%" class="d-flex flex-column scrolling"> <v-card v-if="editMode" height="100%" class="d-flex flex-column scrolling">
<div class="d-flex justify-space-between align-center modal-header"> <div class="d-flex justify-space-between align-center modal-header">
<h1>Upraviť task</h1> <h1>{{ subtask?.id ? 'Upraviť task' : 'Vytvoriť task' }}</h1>
<v-icon @click.stop="closeModal()" icon="mdi-close" size="large"></v-icon> <v-icon @click.stop="closeModal()" icon="mdi-close" size="large"></v-icon>
</div> </div>
+2 -2
View File
@@ -86,7 +86,7 @@ export default {
// eslint-disable-next-line // eslint-disable-next-line
forgotPassword({commit}: {commit: any}, credentials: any) { forgotPassword({commit}: {commit: any}, credentials: any) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios.post_auth_data('v1/auth/forgot', credentials) axios.post_auth_data('v1/users/forgot', credentials)
.then(response => resolve(response)) .then(response => resolve(response))
.catch(error => reject(error)) .catch(error => reject(error))
}) })
@@ -94,7 +94,7 @@ export default {
// eslint-disable-next-line // eslint-disable-next-line
resetPassword({commit}: {commit: any}, credentials: any) { resetPassword({commit}: {commit: any}, credentials: any) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
axios.post_auth_data('v1/auth/reset', credentials) axios.post_auth_data('v1/users/reset', credentials)
.then(response => resolve(response)) .then(response => resolve(response))
.catch(error => reject(error)) .catch(error => reject(error))
}) })