xStore.auth
Đăng ký, đăng nhập, đăng xuất và quản lý hồ sơ khách hàng.
Phương thức
| Phương thức | Cú pháp | Mô tả | Từ phiên bản |
|---|---|---|---|
register |
xStore.auth.register({ email, password, first_name, last_name, phone? }): Promise<CustomerProfile> |
Tạo tài khoản mới và đăng nhập luôn. | 1.0 |
login |
xStore.auth.login({ email, password }): Promise<CustomerProfile> |
Đăng nhập; tự động gộp giỏ hàng vãng lai vào tài khoản. | 1.0 |
logout |
xStore.auth.logout(): Promise<void> |
Đăng xuất và xoá phiên khỏi trình duyệt. Trả về Promise (từ 2.1) vì bộ nhớ phiên có thể bất đồng bộ; gọi không kèm await vẫn xoá phiên, nhưng hãy await nếu cần chắc chắn phiên đã xoá xong trước khi chuyển trang. | 1.0 |
getMe |
xStore.auth.getMe(): Promise<CustomerProfile> |
Lấy hồ sơ của khách đang đăng nhập. | 1.0 |
updateMe |
xStore.auth.updateMe({ first_name?, last_name?, phone?, accepts_marketing? }): Promise<CustomerProfile> |
Cập nhật thông tin cá nhân. Chỉ nhận đúng bốn trường first_name (Họ), last_name (Tên), phone và accepts_marketing — KHÔNG có full_name và KHÔNG đổi được email qua route này. Trường lạ bị bỏ qua âm thầm và API vẫn trả 200, nên hãy gửi đúng tên trường. | 1.0 |
changePassword |
xStore.auth.changePassword({ current_password, new_password }): Promise<void> |
Đổi mật khẩu. | 1.0 |
isLoggedIn |
xStore.auth.isLoggedIn(): boolean |
Kiểm tra trình duyệt có phiên đăng nhập hay không. Hàm đồng bộ. | 1.0 |
Ví dụ đầy đủ
<script>
// isLoggedIn() chạy cục bộ và trả kết quả NGAY — không await.
// Dùng nó để chọn khối header cần hiện, trước khi gọi bất kỳ API nào.
document.body.classList.toggle('is-logged-in', xStore.auth.isLoggedIn());
document.getElementById('login-form').addEventListener('submit', async (e) => {
e.preventDefault();
const form = e.currentTarget;
const btn = form.querySelector('button[type="submit"]');
btn.disabled = true;
try {
const me = await xStore.auth.login({
email: form.email.value,
password: form.password.value,
});
// Đăng nhập xong giỏ vãng lai đã tự gộp vào tài khoản.
window.location.href = new URLSearchParams(location.search).get('next') || '/tai-khoan';
} catch (err) {
form.querySelector('.error').textContent =
err.status === 401 ? 'Email hoặc mật khẩu không đúng.' : err.message;
} finally {
btn.disabled = false;
}
});
// logout() trả Promise: await rồi mới rời trang cho chắc phiên đã xoá.
document.getElementById('logout')?.addEventListener('click', async () => {
await xStore.auth.logout();
window.location.href = '/';
});
</script>
Thư viện gọi tới /api/... trên chính tên miền cửa hàng, nên không cần khai báo địa chỉ máy chủ ở bất kỳ đâu.
Xem thêm Sự kiện để giao diện tự cập nhật sau mỗi thao tác.