|
@@ -7,9 +7,9 @@
|
|
|
</div>
|
|
|
</md-card-header>
|
|
|
|
|
|
- <form @submit.prevent="resisterUser">
|
|
|
+ <form @submit.prevent="validateForm">
|
|
|
<md-card-content>
|
|
|
- <md-field md-clearable>
|
|
|
+ <md-field :class="getValidationClass('email')" md-clearable>
|
|
|
<label for="email">Email</label>
|
|
|
<md-input
|
|
|
id="email"
|
|
@@ -19,8 +19,10 @@
|
|
|
name="email"
|
|
|
autocomplete="email"
|
|
|
/>
|
|
|
+ <span v-if="!$v.form.email.required" class="md-error">The email is required</span>
|
|
|
+ <span v-else-if="!$v.form.email.email" class="md-error">Invalid required</span>
|
|
|
</md-field>
|
|
|
- <md-field>
|
|
|
+ <md-field :class="getValidationClass('password')">
|
|
|
<label for="password">password</label>
|
|
|
<md-input
|
|
|
id="password"
|
|
@@ -30,6 +32,9 @@
|
|
|
name="password"
|
|
|
autocomplete="password"
|
|
|
/>
|
|
|
+ <span v-if="!$v.form.password.required" class="md-error">The email is required</span>
|
|
|
+ <span v-else-if="!$v.form.password.minLength" class="md-error">password too short</span>
|
|
|
+ <span v-else-if="!$v.form.password.maxLength" class="md-error">password too Long</span>
|
|
|
</md-field>
|
|
|
</md-card-content>
|
|
|
|
|
@@ -51,8 +56,25 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import { validationMixin } from 'vuelidate'
|
|
|
+import { required, email, minLength, maxLength } from 'vuelidate/lib/validators'
|
|
|
+
|
|
|
export default {
|
|
|
middleware: 'auth',
|
|
|
+ mixins: [validationMixin],
|
|
|
+ validations: {
|
|
|
+ form: {
|
|
|
+ email: {
|
|
|
+ required,
|
|
|
+ email
|
|
|
+ },
|
|
|
+ password: {
|
|
|
+ required,
|
|
|
+ minLength: minLength(6),
|
|
|
+ maxLength: maxLength(20)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
data: () => ({
|
|
|
form: {
|
|
|
email: '',
|
|
@@ -75,12 +97,26 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ validateForm () {
|
|
|
+ this.$v.$touch()
|
|
|
+ if (!this.$v.$invalid) {
|
|
|
+ this.resisterUser()
|
|
|
+ }
|
|
|
+ },
|
|
|
async resisterUser () {
|
|
|
await this.$store.dispatch('authenticateUser', {
|
|
|
email: this.form.email,
|
|
|
password: this.form.password,
|
|
|
resturnSecureToken: true
|
|
|
})
|
|
|
+ },
|
|
|
+ getValidationClass (fieldName) {
|
|
|
+ const field = this.$v.form[fieldName]
|
|
|
+ if (field) {
|
|
|
+ return {
|
|
|
+ 'md-invalid': field.$invalid && field.$dirty
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|