Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

String indices must be integers (Google Login) #516

Open
kmemonahmed opened this issue Jun 16, 2023 · 2 comments
Open

String indices must be integers (Google Login) #516

kmemonahmed opened this issue Jun 16, 2023 · 2 comments

Comments

@kmemonahmed
Copy link

When trying log in with google with Django version 4.1.5 and Python 3.10 it Always gives this error,

@Housain-maina
Copy link

The reason why this is happening is because the 'complete_login' method in 'GoogleOAuth2Adapter' class is trying to access 'response["id_token"]' and the key does not exist. But since 'response' returns only the value of 'id_token' you can create a custom 'GoogleOAuth2Adapter' by modify it the following way:

from allauth.socialaccount.providers.oauth2.client import OAuth2Client, OAuth2Error
from dj_rest_auth.registration.views import SocialLoginView
from allauth.socialaccount.providers.google.provider import GoogleProvider
from allauth.socialaccount.providers.google import views as google_views
from allauth.socialaccount.providers.oauth2.views import OAuth2Adapter
import jwt


class GoogleOAuth2Adapter(OAuth2Adapter):
    provider_id = GoogleProvider.id
    access_token_url = google_views.ACCESS_TOKEN_URL
    authorize_url = google_views.AUTHORIZE_URL
    id_token_issuer = google_views.ID_TOKEN_ISSUER

	def complete_login(self, request, app, token, response, **kwargs):
	        try:
	            identity_data = jwt.decode(
-               response["id_token"],		# removed line
+				response,					# added line
	                # Since the token was received by direct communication
	                # protected by TLS between this library and Google, we
	                # are allowed to skip checking the token signature
	                # according to the OpenID Connect Core 1.0
	                # specification.
	                # https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation
	                options={
	                    "verify_signature": False,
	                    "verify_iss": True,
	                    "verify_aud": True,
	                    "verify_exp": True,
	                },
	                issuer=self.id_token_issuer,
	                audience=app.client_id,
	            )
	        except jwt.PyJWTError as e:
	            raise OAuth2Error("Invalid id_token") from e
	        login = self.get_provider().sociallogin_from_response(request, identity_data)
	        return login

then

class GoogleLogin(SocialLoginView):
    adapter_class = GoogleOAuth2Adapter
    client_class = OAuth2Client

I'll create a PR for this fix.

@kmemonahmed
Copy link
Author

Good, please let me know when the PR will be merged, it will help me to close this issue and also using in my project.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants