Skip to content

Login With Haravan tạo User như thế nào?

Tóm tắt cho Haravan

Khi người dùng đăng nhập bằng Login With Haravan, hệ thống dùng email từ Haravan để đăng nhập hoặc tạo tài khoản User trên Frappe Helpdesk. Nếu cùng một email thuộc nhiều tổ chức Haravan, hệ thống vẫn giữ một User duy nhất, sau đó lưu thêm từng tổ chức vào bảng liên kết riêng.

1. Có tạo tài khoản User không?

Có. Sau khi Haravan xác thực thành công, callback của app gọi cơ chế OAuth chuẩn của Frappe để đăng nhập user.

Nếu email đã tồn tại trong Frappe:

  • Hệ thống dùng lại User đó.
  • Không tạo user mới.
  • Cập nhật thêm liên kết Haravan nếu đây là tổ chức mới.

Nếu email chưa tồn tại trong Frappe:

  • Frappe tạo một User mới.
  • User.email là email Haravan trả về.
  • User.name thường chính là email đó, ví dụ owner@minhhaistore.vn.
  • User được tạo dưới dạng Website User, phù hợp để dùng portal Helpdesk.
  • Password được sinh ngẫu nhiên vì người dùng đăng nhập qua Haravan OAuth, không cần biết mật khẩu Frappe.
  • App không gửi welcome email mặc định trong lúc tạo OAuth user.

2. Có dùng email không?

Có. Email là định danh chính để Frappe match hoặc tạo User.

Haravan phải trả về email trong profile đăng nhập. Nếu thiếu email, hệ thống không thể tạo phiên đăng nhập hợp lệ.

Ví dụ Haravan trả:

json
{
  "sub": "u_1001",
  "email": "Owner@MinhHaiStore.vn",
  "orgid": "200000376735",
  "orgname": "Minh Hai Store",
  "role": ["owner"]
}

App sẽ chuẩn hóa email thành:

text
owner@minhhaistore.vn

Sau đó Frappe dùng email này để tìm hoặc tạo User.

3. Những dữ liệu nào bắt buộc từ Haravan?

Callback cần tối thiểu ba nhóm thông tin:

Dữ liệuÝ nghĩaVí dụ
sub, userid, user_id hoặc idID người dùng Haravanu_1001
email hoặc email_addressEmail dùng để tạo/match Frappe Userowner@minhhaistore.vn
orgid, org_id hoặc organization_idID tổ chức/cửa hàng Haravan200000376735

Nếu thiếu một trong ba nhóm này, hệ thống sẽ dừng login và ghi log lỗi để debug.

4. Hệ thống lưu thêm gì sau khi login?

Sau khi Frappe login thành công, app lưu thêm dữ liệu Helpdesk:

Nơi lưuMục đích
UserTài khoản đăng nhập Frappe Helpdesk, định danh bằng email
HD CustomerĐại diện cho một tổ chức/cửa hàng Haravan
ContactHồ sơ liên hệ theo email để Helpdesk gắn ticket
Haravan Account LinkBảng mapping giữa User Frappe, Haravan user ID, Haravan org ID và HD Customer

Tên HD Customer được tạo theo mẫu:

text
{Haravan Org Name} - {Haravan Org ID}

Ví dụ:

text
Minh Hai Store - 200000376735

Bảng Haravan Account Link dùng key theo mẫu:

text
HARAVAN-{orgid}-{userid}

Ví dụ:

text
HARAVAN-200000376735-u_1001

5. Nếu một user thuộc nhiều org Haravan thì sao?

Nếu cùng một người dùng Haravan hoặc cùng một email đăng nhập vào nhiều tổ chức khác nhau, hệ thống xử lý như sau:

  • Vẫn chỉ có một Frappe User theo email.
  • Mỗi tổ chức Haravan tạo một HD Customer riêng.
  • Mỗi cặp orgid + userid tạo một Haravan Account Link riêng.
  • Khi tạo ticket, frontend có thể hiển thị dropdown để người dùng chọn tổ chức cần gửi ticket.

Ví dụ cùng email owner@example.com thuộc hai org:

Lần loginHaravan user IDHaravan org IDFrappe UserHD CustomerHaravan Account Link
1u_1001org_aaaowner@example.comShop A - org_aaaHARAVAN-org_aaa-u_1001
2u_1001org_bbbowner@example.comShop B - org_bbbHARAVAN-org_bbb-u_1001

Kết quả: user đăng nhập bằng cùng email, nhưng Helpdesk biết người này có quyền thao tác với nhiều customer/org khác nhau.

6. Quyền xem ticket theo role Haravan

App đang phân biệt quyền Helpdesk dựa trên role Haravan:

Role HaravanCách link ContactHành vi trên Helpdesk
ownerLink Contact với HD CustomerCó thể thấy ticket của tổ chức
adminLink Contact với HD CustomerCó thể thấy ticket của tổ chức
staff hoặc role khácKhông link Contact với HD CustomerChỉ thấy ticket do chính user tạo

Điểm này giúp tránh việc nhân viên thường thấy toàn bộ ticket của cửa hàng nếu Haravan không cấp vai trò quản lý.

7. Các case ví dụ

Case A: User mới, lần đầu login

Haravan trả:

json
{
  "sub": "u_2001",
  "email": "new-owner@example.com",
  "orgid": "org_001",
  "orgname": "New Shop",
  "role": ["owner"]
}

Kết quả:

  • Tạo User: new-owner@example.com.
  • Tạo HD Customer: New Shop - org_001.
  • Tạo hoặc cập nhật Contact theo email.
  • Vì role là owner, Contact được link với HD Customer.
  • Tạo Haravan Account Link: HARAVAN-org_001-u_2001.

Case B: User đã có trong Frappe

Nếu owner@example.com đã là User trong Frappe, khi login bằng Haravan với cùng email:

  • Không tạo user mới.
  • Đăng nhập vào user hiện có.
  • Lưu thêm Haravan user ID, org ID và HD Customer vào Haravan Account Link.

Case C: Cùng email, nhiều org

User owner@example.com login lần lượt vào Shop AShop B.

Kết quả:

  • Frappe vẫn có một User: owner@example.com.
  • Có hai HD Customer: Shop A - org_aShop B - org_b.
  • Có hai dòng Haravan Account Link.
  • Khi tạo ticket, user có thể chọn đúng tổ chức trong dropdown.

Case D: Staff đăng nhập

Haravan trả role:

json
{
  "sub": "u_3001",
  "email": "staff@example.com",
  "orgid": "org_001",
  "orgname": "New Shop",
  "role": ["staff"]
}

Kết quả:

  • User vẫn được login/tạo bình thường.
  • HD CustomerHaravan Account Link vẫn được tạo/cập nhật.
  • Contact không được link vào HD Customer.
  • Staff chỉ thấy ticket do chính họ tạo, không thấy toàn bộ ticket của org.

Case E: Haravan không trả email

Nếu profile thiếu email:

json
{
  "sub": "u_4001",
  "orgid": "org_001",
  "orgname": "New Shop"
}

Kết quả:

  • Login bị dừng.
  • Không tạo User.
  • Hệ thống ghi log lỗi thiếu email.

8. Kết luận bàn giao

Thiết kế hiện tại phù hợp với mô hình Helpdesk:

  • Email là tài khoản đăng nhập chính.
  • Haravan org là customer/tổ chức trong Helpdesk.
  • Multi-org được xử lý bằng bảng mapping, không nhân bản user.
  • Role owner/admin có quyền theo tổ chức; staff bị giới hạn theo ticket cá nhân.

Khi Haravan kiểm thử, cần đảm bảo OAuth profile trả đủ email, sub/userid, orgid, orgnamerole để hệ thống phân quyền đúng.