Files
sso-mvk/views/auth/register.ejs
Дмитрий Мамедов f37733a5c9 first commit
2026-06-10 16:23:41 +03:00

61 lines
2.3 KiB
Plaintext

<% title = 'Register'; %>
<% include ../layouts/main.ejs %>
<div class="row justify-content-center">
<div class="col-md-5">
<div class="card shadow">
<div class="card-body p-4">
<h3 class="card-title text-center mb-4">Create Account</h3>
<form id="registerForm">
<div class="mb-3">
<label class="form-label">Email</label>
<input type="email" class="form-control" id="regEmail" required>
</div>
<div class="mb-3">
<label class="form-label">Display Name</label>
<input type="text" class="form-control" id="regName">
</div>
<div class="mb-3">
<label class="form-label">Password</label>
<input type="password" class="form-control" id="regPassword" minlength="8" required>
</div>
<button type="submit" class="btn btn-primary w-100">Register</button>
</form>
<div id="errorMessage" class="alert alert-danger mt-3 d-none"></div>
<p class="text-center mt-3 mb-0">
<a href="/login">Already have an account? Sign In</a>
</p>
</div>
</div>
</div>
</div>
<script>
document.getElementById('registerForm').addEventListener('submit', async (e) => {
e.preventDefault();
const email = document.getElementById('regEmail').value;
const password = document.getElementById('regPassword').value;
const displayName = document.getElementById('regName').value;
try {
const res = await fetch('/api/auth/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password, displayName }),
});
const data = await res.json();
if (res.ok) {
localStorage.setItem('access_token', data.accessToken);
localStorage.setItem('refresh_token', data.refreshToken);
window.location.href = '/profile';
} else {
const el = document.getElementById('errorMessage');
el.textContent = Array.isArray(data.message) ? data.message.join(', ') : data.message || 'Registration failed';
el.classList.remove('d-none');
}
} catch {
const el = document.getElementById('errorMessage');
el.textContent = 'Network error';
el.classList.remove('d-none');
}
});
</script>