# Authentication

Berry offers four authentication methods - JSON Web Token (JWT), Firebase, Auth0 and AWS - for users to choose from and can be changed to match the user's needs.

{% hint style="info" %}
JWT Authentication is set by default
{% endhint %}

## How does it work?

Access to dashboard pages is restricted to authenticated users. If a user is not authenticated, they will be redirected to the login page.

We used two guards **`GuestGuard`** and **`AuthGuard.`** Guards have been configured in **`src\utils\route-guard\`** folder.

In the **`src/layout/App.js`**, we have specified the auth provider **`JWTProvider`** like,

{% code title="App.js" %}

```javascript
import { JWTProvider as AuthProvider } from 'contexts/JWTContext';
```

{% endcode %}

App component wrap with the **`<JWTProvider>`**

```javascript
<ThemeCustomization>
  ...
  <AuthProvider>
    <Routes />
    <Snackbar />
  </AuthProvider>
  ...
</<ThemeCustomization>>
```

Using **`<JWTProvider>`**&#x57;e can use the context directly by importing **`useContext`** from React and specifying the context **`JWTContext`** Or we can use the custom hook **`useAuth`** from `src/hooks/useAuth.js`

## Auth Configuration:

All configurations related to authentication are stored in the .env file. Those configs are like APIKey to connect authentication server, project ID, etc.

{% hint style="danger" %}
Berry has dummy/test credentials to make authentication work. Users have to change the API and secret as per their project needs. One should not use those provided keys in their live environment.
{% endhint %}

{% code title=".env" %}

```javascript
VITE_APP_VERSION=v5.1.0
GENERATE_SOURCEMAP=false

## Bakeend API URL
VITE_APP_API_URL=https://mock-data-api-nextjs.vercel.app/
VITE_APP_BASE_NAME=

## Map Box 
VITE_APP_MAPBOX_ACCESS_TOKEN=

## Firebase - Google Auth 
VITE_APP_FIREBASE_API_KEY=
VITE_APP_FIREBASE_AUTH_DOMAIN=
VITE_APP_FIREBASE_PROJECT_ID=
VITE_APP_FIREBASE_STORAGE_BUCKET=
VITE_APP_FIREBASE_MESSAGING_SENDER_ID=
VITE_APP_FIREBASE_APP_ID=
VITE_APP_FIREBASE_MEASUREMENT_ID=

## AWS
VITE_APP_AWS_POOL_ID=
VITE_APP_AWS_APP_CLIENT_ID=

## Auth0
VITE_APP_AUTH0_CLIENT_ID=
VITE_APP_AUTH0_DOMAIN=

```

{% endcode %}

> The theme provides working an example for Login and Register only. Other flow like reset password, verification have to make it workable by the user himself.
