From 8409f36dd10a6b3bba838b8155a6568cf14a03c0 Mon Sep 17 00:00:00 2001 From: Ivan Nikolskiy Date: Wed, 9 Jul 2025 15:55:02 +0200 Subject: [PATCH] Fix URI mismatch --- django_hopid/decorators.py | 4 +++- django_hopid/utils.py | 9 +++++++-- django_hopid/views.py | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/django_hopid/decorators.py b/django_hopid/decorators.py index 3d16305..0720f77 100755 --- a/django_hopid/decorators.py +++ b/django_hopid/decorators.py @@ -41,10 +41,12 @@ def hopid_callback(response=None): return view_func(request, *args, **kwargs, error=reason) code = request.GET.get('code') + next = request.GET.get('next') + if not code: return fail("No code returned") - tokens = get_jwt_tokens(code, request.session.pop('pkce_verifier', '')) + tokens = get_jwt_tokens(code, request.session.pop('pkce_verifier', ''), next) error = tokens.get('error', '') if error: diff --git a/django_hopid/utils.py b/django_hopid/utils.py index 59d9474..1a6a8fd 100644 --- a/django_hopid/utils.py +++ b/django_hopid/utils.py @@ -61,12 +61,17 @@ def get_user_from_token(access_token): return profile -def get_jwt_tokens(code, code_verifier): +def get_jwt_tokens(code, code_verifier, next=None): token_url = f"{settings.HOPID_URL}/o/token/" + redirect_uri = settings.HOPID_CLIENT_CALLBACK_URI or settings.HOPID_CLIENT_URI + f'/id/callback/' + + if next: + redirect_uri += f'?{urlencode({"next": next})}' + token_data = { 'grant_type': 'authorization_code', 'code': code, - 'redirect_uri': settings.HOPID_CLIENT_CALLBACK_URI or settings.HOPID_CLIENT_URI + '/id/callback/', + 'redirect_uri': redirect_uri, 'client_id': settings.HOPID_CLIENT_ID, 'client_secret': settings.HOPID_CLIENT_SECRET, 'code_verifier': code_verifier, diff --git a/django_hopid/views.py b/django_hopid/views.py index c26e513..72f8019 100644 --- a/django_hopid/views.py +++ b/django_hopid/views.py @@ -4,6 +4,7 @@ from django.contrib.auth import logout as django_logout from .utils import get_hopid_logout_url from .decorators import hopid_callback + @hopid_callback() def hopid_callback_view(request, *args, **kwargs): next = request.GET.get('next') or '/'