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.