# Authentication

## Credentials authentication

<mark style="color:green;">`POST`</mark> `https://api.codemash.io/:version/auth/credentials`

Authenticate a user using an email password pair. Also supports **GET** method with body parameters in a query string.

#### Path Parameters

| Name    | Type   | Description                    |
| ------- | ------ | ------------------------------ |
| version | string | A version of the API endpoint. |

#### Headers

| Name           | Type   | Description                                            |
| -------------- | ------ | ------------------------------------------------------ |
| x-cm-projectid | string | Your project's ID. Can be passed as a query parameter. |

#### Request Body

| Name     | Type   | Description                  |
| -------- | ------ | ---------------------------- |
| password | string | User's login password.       |
| userName | string | User's login e-mail address. |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title=".NET" %}

```csharp
var client = new CodeMashClient(apiKey, projectId);
var membershipService = new CodeMashMembershipService(client);

await membershipService.AuthenticateCredentialsAsync(
    "test@email.com", 
    "password123"
);
```

{% endtab %}

{% tab title="Node" %}

```csharp
```

{% endtab %}

{% tab title="PHP" %}

```php
use Codemash\CodemashClient;
use Codemash\CodemashAuth;

class CodemashService
{
    protected CodemashAuth $codemashAuth;

    public function __construct()
    {
        $secretKey = '{YOUR_SECRET_KEY}';
        $projectId = '{YOUR_PROJECT_ID}';

        $client = new CodemashClient($secretKey, $projectId);
        $this->codemashAuth = new CodemashAuth($client);
    }

    public function login()
    {
        $responseData = $codemashAuth->authenticate([
        	'userName' => 'test@email.com',
        	'password' => 'password123',
        ]);
    }
}
```

{% endtab %}
{% endtabs %}

## Microsoft authentication

<mark style="color:green;">`POST`</mark> `https://api.codemash.io/{version}/auth/aad`

Authenticate a user using Microsoft. Also supports **GET** method with body parameters in a query string.

#### Path Parameters

| Name    | Type   | Description                    |
| ------- | ------ | ------------------------------ |
| version | string | A version of the API endpoint. |

#### Headers

| Name           | Type   | Description                                            |
| -------------- | ------ | ------------------------------------------------------ |
| x-cm-projectid | string | Your project's ID. Can be passed as a query parameter. |

#### Request Body

| Name | Type   | Description                                                          |
| ---- | ------ | -------------------------------------------------------------------- |
| mode | string | Mode to use for authentication. If not passed, will use the default. |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

## Logout

<mark style="color:green;">`POST`</mark> `https://api.codemash.io/auth/logout`

Logout a user using any of the authentication providers.

#### Path Parameters

| Name | Type   | Description |
| ---- | ------ | ----------- |
|      | string |             |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title=".NET" %}

```csharp
var client = new CodeMashClient(apiKey, projectId);
var membershipService = new CodeMashMembershipService(client);

await membershipService.LogoutAsync("{BEARER_TOKEN}");
```

{% endtab %}

{% tab title="Node" %}

```
```

{% endtab %}

{% tab title="PHP" %}

```php
use Codemash\CodemashClient;
use Codemash\CodemashAuth;

class CodemashService
{
    protected CodemashAuth $codemashAuth;

    public function __construct()
    {
        $secretKey = '{YOUR_SECRET_KEY}';
        $projectId = '{YOUR_PROJECT_ID}';

        $client = new CodemashClient($secretKey, $projectId);
        $this->codemashAuth = new CodemashAuth($client);
    }

    public function logout()
    {
        $responseData = $this->codemashAuth->logout([
        	'bearerToken' => '{BEARER_TOKEN},
        ]);
    }
}
```

{% endtab %}
{% endtabs %}

## Check authentication

<mark style="color:green;">`POST`</mark> `https://api.codemash.io/:version/auth`

Check if the user is authenticated (if authorization token is valid). Also, supports **GET** method.

#### Path Parameters

| Name    | Type   | Description                    |
| ------- | ------ | ------------------------------ |
| version | string | A version of the API endpoint. |

#### Headers

| Name           | Type   | Description                                                                                            |
| -------------- | ------ | ------------------------------------------------------------------------------------------------------ |
| Authorization  | string | Secret API key which belongs to your project or user. Not required if using cookies with a session ID. |
| x-cm-projectid | string | Your project's ID. Can be passed as a query parameter.                                                 |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title=".NET" %}

```csharp
var client = new CodeMashClient(apiKey, projectId);
var membershipService = new CodeMashMembershipService(client);

await membershipService.AuthenticateCredentialsAsync(
    "test@email.com", 
    "password123"
);
```

{% endtab %}

{% tab title="Node" %}

```
```

{% endtab %}

{% tab title="PHP" %}

```php
use Codemash\CodemashClient;
use Codemash\CodemashAuth;

class CodemashService
{
    protected CodemashAuth $codemashAuth;

    public function __construct()
    {
        $secretKey = '{YOUR_SECRET_KEY}';
        $projectId = '{YOUR_PROJECT_ID}';

        $client = new CodemashClient($secretKey, $projectId);
        $this->codemashAuth = new CodemashAuth($client);
    }

    public function isAuthenticated()
    {
        $responseData = $this->codemashAuth->checkAuth();
    }
}
```

{% endtab %}
{% endtabs %}
