I am new to Django OAuth Toolkit. I want to customize the authenticate response.
My authenticate url configuration on django application is :
url('authenticate/',include('oauth2_provider.urls', namespace='oauth2_provider'))
https://django-oauth-toolkit.readthedocs.io/en/latest/install.html
Now, when i launch this command :
curl -X POST -d 'grant_type=password&username=$username&password=$password'-u "$client_id:$client_secret" http://127.0.0.1:8000/authenticate/token/
I get this response :
{"access_token": "ATiM10L0LNaldJPk12drXCjbhoeDR8","expires_in": 36000,"refresh_token": "II4UBhXhpVDEKWmsUQxDzkj3OMjW1p","scope": "read groups write","token_type": "Bearer"
}
And would like this response :
{"access_token": "ATiM10L0LNaldJPk12drXCjbhoeDR8","expires_in": 36000,"refresh_token": "II4UBhXhpVDEKWmsUQxDzkj3OMjW1p","scope": "read groups write","token_type": "Bearer","member": {"id": 1,"username": "username","email": "[email protected]",....}
}
I just want to override this response for add information of authenticated user.
I have read the documentation of django-oauth-toolkit. And i didn't find a solution to my problem...
I was able to make this change by overwriting the TokenView class
in your views.py
from django.http import HttpResponse
from oauth2_provider.views.base import TokenView
from django.utils.decorators import method_decorator
from django.views.decorators.debug import sensitive_post_parameters
from oauth2_provider.models import get_access_token_model, get_application_model
from oauth2_provider.signals import app_authorized
import jsonclass CustomTokenView(TokenView):@method_decorator(sensitive_post_parameters("password"))def post(self, request, *args, **kwargs):url, headers, body, status = self.create_token_response(request)if status == 200:body = json.loads(body)access_token = body.get("access_token")if access_token is not None:token = get_access_token_model().objects.get(token=access_token)app_authorized.send(sender=self, request=request,token=token)body['member'] = {'id': token.user.id, 'username': token.user.username, 'email': token.user.email}body = json.dumps(body) response = HttpResponse(content=body, status=status)for k, v in headers.items():response[k] = vreturn response
In urls.py, just overwrite the token url by pointing to the custom view. This import should come before the include of the django-oauth-toolkit
url(r"authenticate/token/$", CustomTokenView.as_view(), name="token"),
url('authenticate/',include('oauth2_provider.urls', namespace='oauth2_provider'))
The return will now contain the member data
{"access_token": "YtiH9FGwAf7Cb814EjTKbv3FCpLtag", "expires_in": 36000, "token_type": "Bearer", "scope": "read write groups", "refresh_token": "99TyWmCwELrJvymT8m6Z9EPxGr3PJi", "member": {"id": 1, "username": "admin", "email": "[email protected]"}}