Khi bạn cần tạo tài khoản SportUp, đăng nhập lần đầu, đổi mật khẩu, hoặc đăng nhập bằng mạng xã hội (Google, Facebook).
| # | Name | Type | Description |
|---|---|---|---|
| 1 | Đăng nhập bằng email / username | input | Ô nhập email hoặc username kết hợp với ô mật khẩu. Xác thực qua Keycloak ROPC (Resource Owner Password Credentials) — token được cấp ngay mà không cần redirect. |
| 2 | Đăng nhập bằng Google | button | Redirect đến Google OAuth qua Keycloak. Sau khi đồng ý quyền trên Google, Keycloak cấp token và đồng bộ tài khoản về SportUp database. |
| 3 | Đăng nhập bằng Facebook | button | Redirect đến Facebook OAuth qua Keycloak. Tương tự Google — Keycloak xử lý toàn bộ OAuth flow, SportUp không lưu mật khẩu mạng xã hội. |
| 4 | Quên mật khẩu | link | Redirect đến trang reset mật khẩu trên Keycloak. Điền email, nhận link đặt lại mật khẩu qua email, hoàn thành trên giao diện Keycloak. |
| 5 | Tạo tài khoản | button | Điều hướng đến trang đăng ký. Nhập email, username, mật khẩu. Tài khoản được tạo trên Keycloak và đồng bộ về core_db qua webhook. |
| 6 | Đăng xuất | button | Xóa session NextAuth và token Keycloak phía client. Sau khi đăng xuất, truy cập trang yêu cầu xác thực sẽ redirect về /login. |
SportUp không lưu mật khẩu. Tất cả xác thực được ủy quyền cho Keycloak — OAuth 2.0 / OIDC provider. Keycloak lưu mật khẩu dạng hash bcrypt trong keycloak_db riêng biệt.
Đăng nhập & tài khoản được xử lý bởi Keycloak — OAuth 2.0 / OIDC provider chuyên dụng của SportUp. Frontend dùng NextAuth để quản lý session, ủy quyền toàn bộ xác thực cho Keycloak (realm sportup). SportUp hỗ trợ ba phương thức đăng nhập: email/mật khẩu, Google, và Facebook — tất cả đều qua Keycloak làm trung gian. SportUp không bao giờ lưu mật khẩu trực tiếp.
Dùng trang đăng nhập khi truy cập SportUp lần đầu hoặc sau khi phiên hết hạn. Dùng trang đăng ký để tạo tài khoản mới. Mọi tính năng yêu cầu xác thực (đăng ký giải, quản lý giải, nhập tỉ số...) đều cần đăng nhập trước.
Truy cập trang /login. Chọn phương thức đăng nhập: nhập email hoặc username + mật khẩu, hoặc bấm Đăng nhập bằng Google / Facebook để dùng tài khoản mạng xã hội.
Với email/mật khẩu: NextAuth gửi credentials đến Keycloak qua ROPC protocol. Keycloak xác thực và trả access token + refresh token. Không có redirect — trải nghiệm liền mạch trong trang.
Với Google hoặc Facebook: trình duyệt redirect đến trang xác thực của mạng xã hội. Sau khi đồng ý, Keycloak nhận OAuth callback, cấp token SportUp, và đồng bộ thông tin người dùng về core_db qua webhook.
Sau khi đăng nhập thành công, NextAuth lưu session dưới dạng JWT (httpOnly cookie). Access token tự động được gia hạn khi hết hạn — bạn không cần đăng nhập lại trong tối đa 60 ngày.
Để đăng ký tài khoản mới, vào trang /register, điền email, username, mật khẩu. Keycloak tạo tài khoản và gửi email xác minh. Xác minh email trước khi có thể đăng nhập lần đầu.