Untitled

Anonymous
plain_text
02/16/2026 2:47 AM
3.3 KB
11
Indexable
<template>
  <div class="container py-5">
    <div class="row justify-content-center">
      <div class="col-12 col-md-6 col-lg-5">
        <div class="card shadow-sm">
          <div class="card-body p-4">
            <h3 class="mb-1">Register</h3>
            <p class="text-muted mb-4">Create an account.</p>

            <form @submit.prevent="register">
              <div class="mb-3">
                <label class="form-label">Email</label>
                <input v-model.trim="email" type="email" class="form-control" required />
              </div>

              <div class="mb-3">
                <label class="form-label">Password</label>
                <input v-model="password" type="password" class="form-control" required minlength="6" />
              </div>

              <div class="mb-3">
                <label class="form-label">Confirm Password</label>
                <input v-model="confirm" type="password" class="form-control" required minlength="6" />
              </div>

              <div v-if="error" class="alert alert-danger py-2">{{ error }}</div>
              <div v-if="success" class="alert alert-success py-2">{{ success }}</div>

              <button class="btn btn-success w-100" :disabled="loading">
                <span v-if="loading" class="spinner-border spinner-border-sm me-2"></span>
                Register
              </button>
            </form>

            <div class="mt-3 text-center">
              <span class="text-muted">Already have an account?</span>
              <RouterLink to="/login"> Login</RouterLink>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref } from "vue";
import { useRouter } from "vue-router";
import api from "../api";

const router = useRouter();

const email = ref("");
const password = ref("");
const confirm = ref("");

const loading = ref(false);
const error = ref("");
const success = ref("");

async function register() {
  error.value = "";
  success.value = "";

  if (password.value !== confirm.value) {
    error.value = "Passwords do not match.";
    return;
  }

  loading.value = true;
  try {
    const res = await api.post("/users/register", {
      email: email.value,
      password: password.value,
    });

    success.value = res.data?.message || "Registered successfully!";
    setTimeout(() => router.push("/login"), 700);
  } catch (e) {
    error.value = e?.response?.data?.message || "Registration failed.";
  } finally {
    loading.value = false;
  }
}
</script>
Editor is loading...
Leave a Comment