ravikrsngh / clerk_django

MIT License
4 stars 0 forks source link

Clerk Django

"Clerk Django" is a Python library that offers middleware and permissions for authenticating requests when your authentication process is managed by Clerk.

Installation

Use the package manager pip to install clerk_django.

pip install clerk-django

Usage

The first step will be to set your CLERK_SECRET_KEY and CLERK_PEM_PUBLIC_KEY in your environment variables. Then go to your settings.py file and set the ALLOWED_PARTIES config.

ALLOWED_PARTIES = ["http://localhost:5173"]

To use the ClerkAuthMiddleware, add clerk_django.middlewares.clerk.ClerkAuthMiddleware to your middlewares.

MIDDLEWARE = [
    # other middlewares
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'clerk_django.middlewares.clerk.ClerkAuthMiddleware'
]

Once you have added the middleware, you can access the user from the request using request.clerk_user. clerk_user has 3 properties.

from rest_framework import viewsets
from rest_framework.response import Response
from permissions.clerk import ClerkAuthenticated

class ExampleViewset(viewsets.ViewSet):
    permission_classes = [ClerkAuthenticated]

    def list(self, request):
        user_id = request.clerk_user.get('id')
        return Response()

There is a wrapper around the User related apis. All the different function can be found in clerk backend sdk and clerk backend apis

from clerk_django.client import ClerkClient

#Set your CLERK_SECRET_KEY and CLERK_PEM_PUBLIC_KEY in your environment variables.

cc = ClerkClient()

user_details = cc.users.getUser(user_id=user_id)

#Check the clerk documentation for the list of query params.
user_list = cc.users.getUserList({
               "email_address" : ["reachsahilverma@gmail.com"]
            })

I have added all the functions mentioned in the Clerk Backend SDK - User. You just need to use user_id instead of userId. Also in case of verifyPassword, just pass the user_id and password directly. In all the other functions you can pass the params as required and mentioned in the documentation.

res = cc.users.verifyPassword(user_id,password)

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT