Tài khoản khách hàng
Khách đăng ký, đăng nhập và xem đơn của họ ngay trên storefront — cùng trang /account, các khối đổi theo người đang xem, xác minh email tuỳ chọn, và trang chỉ dành cho thành viên.
Storefront của bạn có hệ tài khoản khách hàng riêng, tách hoàn toàn khỏi tài khoản quản trị. Khách đăng ký bằng email và mật khẩu, và tài khoản gắn thẳng vào bản ghi trong Quản lý → Khách hàng — một khách từng đặt hàng vãng lai mà đăng ký đúng email cũ thì lịch sử của họ đi theo luôn.
Năm biểu mẫu tài khoản
Bảng Mẫu dựng sẵn của phần tử Biểu mẫu có đủ: Đăng nhập, Đăng ký, Quên mật khẩu, Đặt lại mật khẩu, Xác minh email. Kéo ra là chạy — chúng gửi thẳng về hệ tài khoản, không bao giờ đi qua kho phản hồi, nên mật khẩu không nằm ở bất cứ đâu bạn (hay ai khác) đọc được.
Hai điều đáng biết sớm:
- Loại của biểu mẫu tài khoản bị khoá từ lúc tạo. Không đổi được một biểu mẫu Đăng nhập thành Liên hệ hay ngược lại — vì đổi được thì một cú nhấp có thể biến nó thành nơi thu mật khẩu vào kho phản hồi. Muốn loại khác, tạo biểu mẫu mới.
- Nút Đăng xuất không phải biểu mẫu: gắn hành động Đăng xuất khách (en: Log out customer) vào bất kỳ nút nào.
Khách đã đăng nhập còn được tự điền các trường nhóm Liên hệ ở mọi biểu mẫu khác, và đơn họ đặt (kể cả đặt nguyên giỏ) tự gắn vào đúng tài khoản.
Xác minh email — tuỳ chọn, trừ một trường hợp
Trong Quản lý → Cài đặt, bật Yêu cầu xác minh email khách hàng thì đăng ký xong phải nhập mã gửi qua email mới dùng được. Mặc định tắt — ít rơi rụng khách nhất.
Một ngoại lệ cố ý: đăng ký bằng email đã có sẵn hồ sơ khách (ví dụ từng đặt hàng vãng lai) thì luôn phải xác minh, bất kể công tắc — vì tài khoản đó sẽ nhìn thấy tên, số điện thoại và lịch sử đơn của hồ sơ cũ, nên phải chứng minh email là của mình trước đã.
Mã gửi đi bằng máy chủ mail của nền tảng, hoặc SMTP riêng của site nếu bạn cấu hình ứng dụng Mail.
Trang /account
Hộp thoại tạo trang có loại Trang tài khoản — trang này phục vụ tại đường
dẫn cố định /account, và là trang thật: bạn trang trí nó như mọi trang khác.
Tạo ra đã có sẵn ba phần tử:
Thông tin tài khoản — tên, email, số điện thoại của khách đang đăng nhập, kèm ba nút tự phục vụ. Sửa đổi tên và số điện thoại. Đổi mật khẩu yêu cầu nhập đúng mật khẩu hiện tại, và đổi xong thì mọi thiết bị khác đang đăng nhập tài khoản đó bị đăng xuất, chỉ trình duyệt vừa đổi ở lại. Đổi email cũng yêu cầu mật khẩu hiện tại, rồi gửi mã xác nhận tới hộp thư mới — nhập mã xong email đăng nhập mới có hiệu lực, nên không ai đổi được tài khoản sang một hộp thư họ không sở hữu. Khách chưa đăng nhập thấy lời mời đăng nhập (sửa được chữ). Lịch sử đơn hàng — đơn của đúng khách đó, mới nhất trước, trạng thái đơn, tình trạng thanh toán và tiền hiển thị theo ngôn ngữ site. Hai trạng thái đứng cạnh nhau vì chúng độc lập, và khách vừa trả tiền online hôm qua đang hỏi cái thứ hai. Đơn nào có sản phẩm thì bấm vào dòng đơn để mở chi tiết: từng món với phân loại (màu, cỡ…), số lượng và thành tiền — bấm lần nữa để đóng. Sổ địa chỉ — các địa chỉ đã lưu của khách: thêm, sửa, xoá và đặt một địa chỉ làm mặc định. Xoá cần bấm hai lần trên cùng một nút, để một cú chạm nhầm không mất địa chỉ. Tối đa 10 địa chỉ.
Khách chưa có tài khoản vẫn tra được đơn
Phần lớn khách của một cửa hàng Việt Nam không bao giờ đăng ký: đơn COD chỉ hỏi số điện thoại. Với họ, câu "đăng nhập để xem đơn hàng" là lời khuyên không dùng được — nên chỗ đó không chỉ có lời khuyên nữa.
Khi người xem chưa đăng nhập, Lịch sử đơn hàng hiện thêm hai ô và một nút: mã đơn hàng và số điện thoại hoặc email đã dùng lúc đặt. Đúng cả hai thì đơn hiện ra — vẽ bằng đúng hàng mà danh sách của khách đã đăng nhập dùng, nên nó mang kiểu dáng bạn đã thiết kế.
Mã đơn khách lấy ở đâu: lời cảm ơn sau khi đặt hàng in ra mã đó, kèm số tiền còn phải trả.
Bốn dòng trong bảng thuộc tính điều khiển cụm này: Tra cứu đơn bật/tắt, và ba ô chữ cho hai ô nhập và cái nút. Cửa hàng chỉ bán cho thành viên thì tắt dòng đầu, ba dòng còn lại biến mất theo.
Câu trả lời cố tình thiếu địa chỉ và email. Hai thứ xác thực ở đây — mã đơn chạy theo thứ tự, số điện thoại có thể đoán — đều không mạnh, nên đơn trả về chỉ gồm trạng thái, số tiền, các món và mã vận đơn nếu có. Người đoán trúng một cặp không lấy được địa chỉ nhà của ai cả. Mã đơn cũng phải khớp chính xác: gõ "#100" không ra "#1001".
Bật nhận trả hàng thì Lịch sử đơn hàng mọc thêm một cửa nữa: khách chọn món và số lượng muốn gửi lại, ngay trên dòng đơn — xem Trả hàng. Muốn khách xem lại những gì họ đã bấm trái tim, thêm phần tử Sản phẩm đã lưu (cũng trong nhóm Thành viên): Lưu để xem sau.
Cài ứng dụng Điểm thưởng thì bảng phần tử có thêm thẻ Điểm thưởng (trong thẻ Ứng dụng) để đặt lên trang này — khách xem số dư, đổi điểm lấy mã giảm giá và xem lịch sử điểm ngay tại chỗ.
Địa chỉ mặc định cũng là thứ các biểu mẫu tự điền cho khách đã đăng nhập: số nhà, mã bưu chính điền thẳng vào ô, còn tỉnh/thành và phường/xã được chọn sẵn trong danh sách — khách chỉ còn xác nhận thay vì gõ lại từ đầu.
Tạo nhiều trang tài khoản được; ngôi sao ★ trong cài đặt trang quyết định
trang nào phục vụ tại /account — giống hệt cách trang thanh toán chọn trang
cho /checkout.
Hai khối theo người xem
Hai phần tử còn lại của nhóm Thành viên không dựng sẵn thứ gì. Việc của chúng là cho phần còn lại của trang biết ai đang xem.
Ẩn/hiện theo đăng nhập (en: Show by sign-in) là một khung chứa, và nó chỉ có đúng một lựa chọn: Hiển thị cho → Thành viên hoặc Khách. Bỏ gì vào trong cũng được, và chỉ nhóm bạn chọn nhìn thấy phần đó. Kiểu dùng thường gặp nhất là một cặp ở đầu trang: một khối Khách chứa hai nút Đăng nhập / Đăng ký, một khối Thành viên chứa lời chào và nút Đăng xuất.
Tên/email thành viên (en: Member name / email) là một mẩu chữ nằm ngay trong dòng: tên, email hoặc số điện thoại của khách đang đăng nhập. Chữ phía trước và chữ phía sau gõ thẳng trong bảng thuộc tính, nên "Xin chào, Nam!" là một phần tử chứ không phải ba mẩu ghép lại — và nó xuống dòng như một câu bình thường trên màn hình hẹp. Ô Chữ cho khách là thứ hiện ra thay cho cả cụm khi người xem chưa đăng nhập; để trống thì không hiện gì.
Cả hai đều hỏi ai đang xem sau khi trang đã hiện ra, nên một khách đã đăng nhập có thể thấy khối Khách loé lên một nhịp rồi biến mất. Đổi lại, trang không phải chờ ai cả trước khi vẽ, và khi trình duyệt tắt JavaScript thì mọi thứ dừng ở đúng những gì một khách chưa đăng nhập nên thấy.
Đặt một khối vào bên trong khối của nhóm ngược lại thì không còn ai xem được — khối ngoài đã ẩn với một nhóm, khối trong ẩn nốt với nhóm kia. Trình dựng báo đỏ ngay trên khối đó thay vì để bạn tự phát hiện trên trang thật.
Ẩn không phải là bảo mật
Khối ẩn/hiện theo đăng nhập giấu nội dung chứ không giữ lại nó: phần bên trong vẫn nằm trong mã nguồn trang, ai chịu khó mở ra là đọc được. Nó đúng cho việc đổi mặt trang theo người xem — chào tên, đổi nút, thêm một dòng ghi chú. Nó sai cho mã giảm giá riêng, đường dẫn tải về, hay bất cứ thứ gì lộ ra là mất giá trị. Những thứ đó thuộc về Chỉ dành cho thành viên ngay bên dưới, chặn ở máy chủ trước khi một chữ nào được gửi đi.
Trang chỉ dành cho thành viên
Trong cài đặt của bất kỳ trang nào, bật Chỉ dành cho thành viên. Khách
chưa đăng nhập mở trang đó sẽ được đưa về trang /account để đăng nhập (chưa
có trang tài khoản thì về trang chủ). Danh sách trang đánh dấu các trang này
bằng biểu tượng ổ khoá.
Chặn xảy ra ở máy chủ, theo từng lượt xem — không phải kiểu giấu bằng CSS mà ai tò mò cũng lách được. Riêng nút Xem trước trong trình dựng thì không bị chặn: bạn là chủ site, bạn luôn xem được trang của mình.
Cập nhật 10/10/2026