django-channels-jwt-auth-middleware
Custom AuthMiddlewareStack to get users from JWT token for Django Channels.
Installation
Simply,
$ pip install django-channels-jwt-auth-middleware
And that it.
Usage
All you have to do is wrap your URLRouter.
from django_channels_jwt_auth_middleware.auth import JWTAuthMiddlewareStack
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": JWTAuthMiddlewareStack(
URLRouter(
websocket_urlpatterns,
)
),
})
AuthMiddlewareStack is already in JWTAuthMiddlewareStack. If you want to change this, simply do;
from django_channels_jwt_auth_middleware.auth import JWTAuthMiddleware
from . import YourCustomMiddlewareStack
def CustomJWTAuthMiddlewareStack(app):
return JWTAuthMiddleware(YourCustomMiddlewareStack(app))
Simply as that :)
Testing
Testing is done by two methods.
- automated testing using django's test system.
- manual testing by hand.
I have tried testing the middleware through ChannelsLiveServerTestCase, but currently this does not run due to pickle error in multiprocessing package from python.
For this reason no-token test cases were tested using django's test system using a test project, and test cases with jwt token is tested by hand.
Hand testing chrome extension called Browser WebSocket Client was used. B
low is a simple evidence from the hand testing.
If you go to testproject/pages/tests.py you will see the consumer that is used for testing.
class TestConsumer(WebsocketConsumer):
def connect(self):
self.accept()
# def disconnect(self, code):
# self.disconnect()
def receive(self, text_data, bytes_data=None):
context = {
'message': 'testing consumer',
}
user = self.scope['user']
if (user_id := user.id):
context.update({'user': str(user_id)})
else:
context.update({'user': None})
self.send(text_data=json.dumps(context))
simply, is a data is passed in to the websocket it will return a user id of None for AnonymousUser.
1.0.0 (2021-01-20)
- First release on PyPI.
Release files for django-channels-jwt-auth-middleware 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-channels-jwt-auth-middleware-1.0.0.tar.gz | 4.8 kB | Details |
Release files / django-channels-jwt-auth-middleware-1.0.0.tar.gz
| Download URL | django-channels-jwt-auth-middleware-1.0.0.tar.gz |
|---|---|
| Size | 4.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7fdaaf419ef7f800d0da990d8e0ca53f7d120a66de7fb4446f77607ea3b3dd76
|
|
BLAKE2b-256 checksum How to use checksums |
a738e0ebc367cded21b4ef7d7c484e139aebd6583e8d2dd25d668a908bf42761
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/51.3.3 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.5
|