> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-llms-scoped-indexes.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentication

> Configure authentication for CometChat Calls SDK v5 on Flutter with app credentials, logged-in users, and secure call access.

Before users can make or receive calls, they must be authenticated with the CometChat Calls SDK. This guide covers the login and logout methods.

<Note>
  **Sample Users**

  CometChat provides 5 test users: `cometchat-uid-1`, `cometchat-uid-2`, `cometchat-uid-3`, `cometchat-uid-4`, and `cometchat-uid-5`.
</Note>

## Check Login Status

Before calling `login()`, check if a user is already logged in using `getLoggedInUser()`. The SDK maintains the session internally, so you only need to login once per user session.

```dart theme={null}
User? loggedInUser = await CometChatCalls.getLoggedInUser();

if (loggedInUser != null) {
  // User is already logged in
  debugPrint("User already logged in: ${loggedInUser.uid}");
} else {
  // No user logged in, proceed with login
}
```

The `getLoggedInUser()` method returns a `Future<User?>` — it resolves to a `User` object if a user is logged in, or `null` if no session exists.

## Login with UID and API Key

This method is suitable for development and testing. For production apps, use [Auth Token login](#login-with-auth-token) instead.

<Warning>
  **Security Notice**

  Using the API Key directly in client code is not recommended for production. Use Auth Token authentication for enhanced security.
</Warning>

```dart theme={null}
String uid = "cometchat-uid-1"; // Replace with your user's UID
String authKey = "AUTH_KEY"; // Replace with your Auth Key

User? loggedInUser = await CometChatCalls.getLoggedInUser();

if (loggedInUser == null) {
  CometChatCalls.login(
    uid: uid,
    authKey: authKey,
    onSuccess: (User? user) {
      debugPrint("Login successful: ${user?.uid}");
    },
    onError: (CometChatCallsException e) {
      debugPrint("Login failed: ${e.message}");
    },
  );
} else {
  // User already logged in
}
```

| Parameter | Type | Description |
| - | - | - |
| `uid` | String | The unique identifier of the user to login |
| `authKey` | String | Your CometChat Auth Key |
| `onSuccess` | Function(User) | Callback invoked on successful login with the logged-in user |
| `onError` | Function(CometChatCallsException) | Callback invoked on login failure |

## Login with Auth Token

This is the recommended authentication method for production applications. The Auth Token is generated server-side, keeping your API Key secure.

### Auth Token Flow

1. User authenticates with your backend
2. Your backend calls the [CometChat Create Auth Token API](https://api-explorer.cometchat.com/reference/create-authtoken)
3. Your backend returns the Auth Token to the client
4. Client uses the Auth Token to login

```dart theme={null}
String authToken = "AUTH_TOKEN"; // Token received from your backend

CometChatCalls.loginWithAuthToken(
  authToken: authToken,
  onSuccess: (User? user) {
    debugPrint("Login successful: ${user?.uid}");
  },
  onError: (CometChatCallsException e) {
    debugPrint("Login failed: ${e.message}");
  },
);
```

| Parameter | Type | Description |
| - | - | - |
| `authToken` | String | Auth Token generated via CometChat API |
| `onSuccess` | Function(User) | Callback invoked on successful login with the logged-in user |
| `onError` | Function(CometChatCallsException) | Callback invoked on login failure |

## User Object

On successful login, the callback returns a `User` object containing user information:

| Property | Type | Description |
| - | - | - |
| `uid` | String | Unique identifier of the user |
| `name` | String | Display name of the user |
| `avatar` | String | URL of the user's avatar image |
| `status` | String | User's online status |

## Logout

Call `logout()` when the user signs out of your application. This clears the local session and disconnects from CometChat services.

```dart theme={null}
CometChatCalls.logout(
  onSuccess: (String message) {
    debugPrint("Logout successful");
  },
  onError: (CometChatCallsException e) {
    debugPrint("Logout failed: ${e.message}");
  },
);
```

## Error Handling

Common authentication errors:

| Error Code | Description |
| - | - |
| `ERROR_INVALID_UID` | The provided UID is empty or invalid |
| `ERROR_UID_WITH_SPACE` | The UID contains spaces (not allowed) |
| `ERROR_API_KEY_NOT_FOUND` | The API Key is missing or invalid |
| `ERROR_BLANK_AUTHTOKEN` | The Auth Token is empty |
| `ERROR_LOGIN_IN_PROGRESS` | A login operation is already in progress |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.