-
Notifications
You must be signed in to change notification settings - Fork 306
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
Comments
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. |
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. |
When trying log in with google with Django version 4.1.5 and Python 3.10 it Always gives this error,
The text was updated successfully, but these errors were encountered: