Login

Mutation · login

login(input: LoginInput!): AuthPayload!

Đăng nhập tài khoản dùng mật khẩu sau khi email đã được xác minh. Khi thành công, API tạo một phiên mới gồm access token và refresh token.

Gửi qua HTTP POST /graphql. Không cần access token hoặc quyền thành viên workspace/conversation. Các mutation xác thực dùng chung giới hạn 20 lần/phút theo IP trên mỗi tiến trình API; vượt giới hạn trả RATE_LIMITED.

Input

Đối sốKiểu GraphQLBắt buộcÝ nghĩa
inputLoginInput!CóThông tin đăng nhập; schema không khai báo giá trị mặc định.

LoginInput

TrườngKiểu GraphQLBắt buộcQuy tắc
emailString!CóEmail hợp lệ, tối đa 254 ký tự. Server chuyển thành chữ thường khi tìm tài khoản.
passwordString!CóTừ 1 đến 72 ký tự và không quá 72 byte UTF-8.
rememberMeBooleanKhôngBỏ qua hoặc gửi null đều được xử lý như true (đây là hành vi server, không phải mặc định trong schema). true dùng JWT_REFRESH_TTL, mặc định 30 ngày; false dùng JWT_SESSION_TTL, mặc định 12 giờ và không dài hơn JWT_REFRESH_TTL. Với false, client nên chỉ giữ token trong phiên trình duyệt.

Output

Trả về AuthPayload!: một đối tượng không null khi thành công.

AuthPayload

TrườngKiểu GraphQLÝ nghĩa
accessTokenString!JWT dùng cho yêu cầu tiếp theo; thời hạn theo JWT_ACCESS_TTL, mặc định 15 phút.
refreshTokenString!Token của phiên mới, dùng với refreshToken.
userUserProfile!Hồ sơ người dùng; xem UserProfile.

UserProfile

TrườngKiểu GraphQLÝ nghĩa
idID!ID người dùng.
usernameString!Tên người dùng.
displayNameString!Tên hiển thị.
emailString!Email của tài khoản.
avatarUrlStringURL ảnh đại diện hoặc null.

Ví dụ

mutation Login($input: LoginInput!) {
  login(input: $input) {
    accessToken
    refreshToken
    user { id username displayName email avatarUrl }
  }
}

Biến:

{
  "input": {
    "email": "[email protected]",
    "password": "example-password-123",
    "rememberMe": false
  }
}

Phản hồi minh họa:

{
  "data": {
    "login": {
      "accessToken": "example.access.token",
      "refreshToken": "example-refresh-token",
      "user": {
        "id": "user_123",
        "username": "lan_nguyen",
        "displayName": "Lan Nguyễn",
        "email": "[email protected]",
        "avatarUrl": null
      }
    }
  }
}

Sai email hoặc mật khẩu trả UNAUTHENTICATED. Mật khẩu đúng nhưng email chưa xác minh trả EMAIL_NOT_VERIFIED. Đầu vào không hợp lệ trả BAD_USER_INPUT.

Chữ ký operation được tạo từ GraphQL schema.