> For the complete documentation index, see [llms.txt](https://docs.taptalk.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.taptalk.io/onetalk-omnichannel-documentation/onetalk-channel-integration/live-chat/onetalk-live-chat-for-react-native/authentication-ios.md).

# Authentication - iOS

TapTalk.io Omnichannel SDK provides some essential methods to handle user authentication.

### Authenticate User (Optional)

You can authenticate the user that is currently logged in before calling **`navigateToOneTalk`**. To do this, you can add an authentication method in the previously created module file. (See [Get Started - iOS](https://docs.taptalk.io/onetalk-omnichannel-documentation/onetalk-channel-integration/live-chat/onetalk-live-chat-for-react-native/pages/-MQV25u4ATdW02mvTwhv#configure-and-initialize-taptalk.io-omnichannel-ios-sdk-for-react-native-project)). We will add a `RCT_EXPORT_METHOD` named **`authenticateUser`**.

You can start by adding an authentication method in **AppDelegate.m**.

{% code title="AppDelegate.m" %}

```csharp
@interface AppDelegate () <TapTalkLiveDelegate>

...

// Method to authenticate user
- (void)authenticateUserWithFullName:(NSString *)fullName 
                               email:(NSString *)email 
                             success:(void (^)(NSString *message))success 
                               error:(void (^)(NSString *message))error {

    [[TapTalkLive sharedInstance] authenticateUserWithFullName:fullName 
                                                         email:email 
    success:^(NSString *message) {
        success(message);
    } 
    failure:^(NSError *error) {
        error(error.localizedDescription);
    }];
}

@end
```

{% endcode %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`fullName`**: (NSString \*) current user's full name\
\&#xNAN;**`email`**: (NSString \*) current user's email address\
\&#xNAN;**`success`**: (void (^)(NSString \*message)) success callback containing a message\
\&#xNAN;**`error`**: (void (^)(NSString \*message)) success callback containing the error message
{% endhint %}

Then open your **AppDelegate.h** file and add the following lines to enable the previously created method to be called from another file.

{% code title="AppDelegate.h" %}

```csharp
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>

...

- (void)authenticateUserWithFullName:(NSString *)fullName 
                               email:(NSString *)email 
                             success:(void (^)(NSString *message))success 
                               error:(void (^)(NSString *message))error;

@end
```

{% endcode %}

Then open the previously created **OneTalkStarterModule.m** and add a method to bridge the authentication method from AppDelegate to JavaScript.

{% code title="OneTalkStarterModule.m" %}

```csharp
...

RCT_EXPORT_METHOD(authenticateUser:(NSString *)fullName
                             email:(NSString *)email
                   successCallback:(RCTResponseSenderBlock)successCallback
                     errorCallback:(RCTResponseSenderBlock)errorCallback)
{
    dispatch_async(dispatch_get_main_queue(), ^{
        AppDelegate *appDelegate = (AppDelegate *) [UIApplication sharedApplication].delegate;
        [appDelegate authenticateUserWithFullName:fullName 
                                            email:email 
        success:^(NSString *message) {
            successCallback(@[message]);
        }
        failure:^(NSString *message) {
            errorCallback(@[message]);
        ];
    });
}
```

{% endcode %}

You can then call the method from JavaScript as such:

```csharp
NativeModules.OneTalkStarter.authenticateUser(
    'USER_NAME', 
    'USER_EMAIL',
    (successMessage) => {
        // Successfully authenticated user
    },
    (errorMessage) => {
       // An error occurred during authentication
    }
);
```

After successfully authenticated, user will no longer be required to fill name and email to create a case.

### Logout and Clear TapTalkLive Data

You may also add another method when you need to logout and clear all local cached data from Omnichannel SDK. We will name this method **`clearAllTapLiveData`**.

Start by adding an authentication method in **AppDelegate.m** and **AppDelegate.h**.

{% code title="AppDelegate.m" %}

```csharp
@interface AppDelegate () <TapTalkLiveDelegate>

...

// Method to clear all live chat data
- (void)clearAllTapLiveData {
    [[TapTalkLive sharedInstance] clearAllTapLiveData];
}

@end
```

{% endcode %}

{% code title="AppDelegate.h" %}

```csharp
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>

...

- (void)clearAllTapLiveData;

@end
```

{% endcode %}

Then add the method to **OneTalkStarterModule.m**.

{% code title="OneTalkStarterModule.m" %}

```csharp
...

RCT_EXPORT_METHOD(clearAllTapLiveData)
{
    dispatch_async(dispatch_get_main_queue(), ^{
        AppDelegate *appDelegate = (AppDelegate *) [UIApplication sharedApplication].delegate;
        [appDelegate clearAllTapLiveData];
    });
}
```

{% endcode %}

You can then call the method from JavaScript when needed.

```javascript
NativeModules.OneTalkStarter.clearAllTapLiveData();
```
