Skip to content
Snippets Groups Projects
Select Git revision
  • 2cfbd2471a85fce8067b53f29f747be25dc4b5b5
  • main default
  • 1.0.0
3 results

Register.vue

Blame
  • Register.vue 3.08 KiB
    <template>
      <div class="global-container">
        <h1 class="title">Regisztráció</h1>
        <div v-if="errorMessage" class="alert alert-error">
          {{ errorMessage }}
        </div>
        <form @submit.prevent="validateAndRegister">
          <div class="input-group">
            <label for="username">Felhasználónév</label>
            <input id="username" v-model="username" type="text" required autocomplete="username">
          </div>
          <div class="input-group">
            <label for="password">Jelszó</label>
            <input id="password" v-model="password" type="password" required autocomplete="current-password">
          </div>
          <button type="submit">Regisztrálás</button>
        </form>
      </div>
    </template>
    
    <script>
    import { axios, apiURL } from '@/axiosConfig.js';
    import { ref } from 'vue';
    import { useStore } from 'vuex';
    import { useRouter } from 'vue-router';
    
    export default {
      name: 'Register',
      setup() {
        const username = ref('');
        const password = ref('');
        const errorMessage = ref('');
        const store = useStore();
        const router = useRouter();
    
        const validateAndRegister = () => {
          if (validateForm()) {
            register();
          }
        };
    
        const validateForm = () => {
          const usernameRegex = /^\w{5,20}$/; // username can contain numbers, upper and lowercase characters
          const passwordRegex = /^(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{8,20}$/; // password must contain at least one uppercase letter and one digit
    
          if (!username.value) {
            errorMessage.value = 'Felhasználónév megadása kötelező';
            return false;
          }
    
          if (!username.value.match(usernameRegex)) {
            errorMessage.value = 'Érvénytelen felhasználónév. A felhasználónévnek legalább 5 és legfeljebb 20 karakter hosszúnak kell lennie.';
            return false;
          }
    
          if (!password.value) {
            errorMessage.value = 'Jelszó megadása kötelező';
            return false;
          }
    
          if (!password.value.match(passwordRegex)) {
            errorMessage.value = 'Érvénytelen jelszó. A jelszónak legalább 8 és legfeljebb 20 karakter hosszúnak kell lennie, és tartalmaznia kell legalább egy nagybetűt és egy számot.';
            return false;
          }
    
          errorMessage.value = '';
          return true;
        };
    
        const register = async () => {
          try {
            const response = await axios.post(apiURL + '/register', {
              username: username.value,
              password: password.value
            });
    
            // If registration is successful, redirect to login page
            if (response.status === 201) {
              store.commit('setRegistrationSuccess', true);
              router.push('/login');
            }
          } catch (error) {
            // Handle error
            console.error(error);
    
            // Display error message
            if (error.response && error.response.data) {
              errorMessage.value = 'Regisztráció sikertelen: ' + error.response.data;
            } else {
              errorMessage.value = 'Regisztráció sikertelen: ' + error.message;
            }
          }
        };
    
        return {
          username,
          password,
          errorMessage,
          validateAndRegister,
        };
      },
    };
    </script>