Django Q & A

 

How to add user authentication to Django REST framework API using JWT (JSON Web Tokens)?

Adding user authentication to a Django REST framework (DRF) API using JSON Web Tokens (JWT) is a popular and secure approach. JWTs allow you to verify the identity of users without storing sessions on the server, making them suitable for stateless APIs. Here’s how you can implement JWT-based authentication in a Django REST framework API:

 

  1. Install Required Packages:

   Start by installing the necessary packages:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```bash
pip install djangorestframework djangorestframework-jwt
```
```bash pip install djangorestframework djangorestframework-jwt ```
 ```bash

   pip install djangorestframework djangorestframework-jwt

   ```

 

  1. Configure Django Settings:

   In your Django project’s settings, add the following configurations:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```python
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
# JWT settings
from datetime import timedelta
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': timedelta(days=1),
}
```
```python # settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', ), } # JWT settings from datetime import timedelta JWT_AUTH = { 'JWT_EXPIRATION_DELTA': timedelta(days=1), } ```
 ```python

   # settings.py




   REST_FRAMEWORK = {

       'DEFAULT_AUTHENTICATION_CLASSES': (

           'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

       ),

   }




   # JWT settings

   from datetime import timedelta

   JWT_AUTH = {

       'JWT_EXPIRATION_DELTA': timedelta(days=1),

   }

   ```

   Adjust the `JWT_EXPIRATION_DELTA` to set the token’s expiration time as needed.

 

  1. Create API Views:

   Create your API views as usual and apply the `@authentication_classes` and `@permission_classes` decorators to secure them:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```python
from rest_framework.decorators import authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated])
class YourSecuredView(APIView):
def get(self, request):
return Response({'message': 'This is a secured view.'})
```
```python from rest_framework.decorators import authentication_classes, permission_classes from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from rest_framework_jwt.authentication import JSONWebTokenAuthentication @authentication_classes([JSONWebTokenAuthentication]) @permission_classes([IsAuthenticated]) class YourSecuredView(APIView): def get(self, request): return Response({'message': 'This is a secured view.'}) ```
```python

   from rest_framework.decorators import authentication_classes, permission_classes

   from rest_framework.permissions import IsAuthenticated

   from rest_framework.response import Response

   from rest_framework.views import APIView

   from rest_framework_jwt.authentication import JSONWebTokenAuthentication




   @authentication_classes([JSONWebTokenAuthentication])

   @permission_classes([IsAuthenticated])

   class YourSecuredView(APIView):

       def get(self, request):

           return Response({'message': 'This is a secured view.'})

   ```

   In this example, the `YourSecuredView` is protected, and users must be authenticated to access it.

 

  1. Obtain JWT Tokens:

   To obtain a JWT token, users typically need to send a POST request to a login endpoint with their credentials. DRF provides built-in views for this, such as `obtain_jwt_token` and `refresh_jwt_token`. You can configure URLs and use these views in your project.

 

  1. Include JWT Token in Requests:

   Once users obtain a token, they should include it in the `Authorization` header of subsequent API requests as `Bearer <token>`.

With these steps, you can add JWT-based user authentication to your Django REST framework API. It provides a secure and scalable way to protect your endpoints and ensure that only authorized users can access them.

Previously at
Flag Argentina
Argentina
time icon
GMT+2
Experienced Full-stack Developer with a focus on Django, having 7 years of expertise. Worked on diverse projects, utilizing React, Python, Django, and more.