[PYTHON] J'étais accro à ne pas pouvoir obtenir une adresse e-mail de Google avec l'authentification django-allauth

Lors de la mise en œuvre de la fonction de connexion sociale à l'aide de django-allauth, j'étais accro à ne pas pouvoir obtenir d'informations par courrier électronique. Comme c'est un gros problème, je laisserai l'événement, la cause et les contre-mesures dans cet article.

Qu'est-il arrivé

Ce que j'essayais, c'était d'utiliser django-allauth pour activer la connexion sociale google. J'ai confirmé que je pouvais me connecter en l'implémentant comme décrit dans le document officiel et l'article qiita, mais lorsque j'ai regardé les informations du compte créé, pour une raison quelconque, l'adresse e-mail était vide. not_email.png Figure: Contenu du compte créé après la connexion sociale google (contrôle sur l'écran de gestion)

Cause

En conclusion, c'était parce que la portée du fournisseur Google n'était pas définie correctement. Le fournisseur Google que django-allauth a par défaut définit la portée par défaut sur profile uniquement. Il n'y a aucune information d'adresse e-mail dans la réponse du `profileʻAPI. Par conséquent, puisque les informations n'ont pas été obtenues de Google en premier lieu, cela signifie que cet événement s'est produit.

Alors, comment y faire face ... La solution consiste à ajouter une "API qui vous donne des informations d'adresse e-mail" à la portée. Au fait, dans le cas de google, le nom de l'API est «e-mail».

*Qu'est-ce que la portée? Cliquez ici ➡Manipulation de la portée OAuth2| Apigee | Google Cloud

approche

Pour contourner ce problème, vous pouvez appliquer l'une des deux méthodes suivantes.

  1. Définissez ʻACCOUNT_EMAIL_REQUIRED = True` dans settings.py
  2. Dans settings.py, définissez la portée du fournisseur Google avec SOCIALACCOUNT_PROVIDERS

1. Définissez ʻACCOUNT_EMAIL_REQUIRED = True` dans settings.py

setting.py


...
ACCOUNT_EMAIL_REQUIRED=True
...

Avec ce paramètre, django-allauth fera du bon travail afin que vous puissiez obtenir des informations d'adresse e-mail non seulement de Google, mais également d'autres fournisseurs. Par exemple, dans le cas du fournisseur google, en plus de `profileʻAPI, le ʻemailʻAPI sera ajouté à la portée par défaut sans autorisation. (Pour plus d'informations, consultez githu)

2. Dans settings.py, définissez la portée du fournisseur Google avec SOCIALACCOUNT_PROVIDERS

settings.py


SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': [
            'profile',
            'email',
         ],
    },
}

Dans ce paramètre, contrairement à la méthode 1, l'API à utiliser directement est spécifiée.

Résumé

Ce qui précède est la cause et le remède pour le cas où les informations de messagerie ne peuvent pas être obtenues du fournisseur avec django-allauth.

référence

Recommended Posts

J'étais accro à ne pas pouvoir obtenir une adresse e-mail de Google avec l'authentification django-allauth
J'étais accro à ne pas pouvoir utiliser Markdown pour la description longue de pypi
J'ai pu implémenter l'authentification d'application Web avec flask-login
Une histoire à laquelle j'étais accro à essayer d'obtenir une URL de vidéo avec tweepy
Utilisez Python de Java avec Jython. J'étais aussi accro.
Envoyez un email à l'adresse de Spushi avec python
J'étais accro au grattage avec Selenium (+ Python) en 2020
[IOS] Animation GIF avec Pythonista3. J'en étais accro.
J'ai essayé d'envoyer un e-mail d'Amazon SES avec Python
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
J'obtiens une erreur en essayant d'installer maec 4.0.1.0 avec pip
J'ai essayé d'envoyer du courrier depuis le serveur Sakura avec flask-mail
J'étais accro au multitraitement + psycopg2
J'ai pu imprimer l'imprimante thermique "PAPERANG" depuis Python (Windows10, Python3.6)
À propos du démarrage d'une instance avec un volume EBS crypté (où j'étais accro)
J'étais accro à l'exécution de tensorflow sur GPU avec le pilote NVIDIA 440 + CUDA 10.2
Envoyer des e-mails à une adresse e-mail spécifique avec python sans paramétrer SMTP
J'étais accro à la création d'un environnement Python venv avec VS Code
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'étais accro à essayer Cython avec PyCharm, alors prenez note
J'obtiens une erreur avec les pandas d'importation.
J'ai essayé de commencer avec Hy
J'étais accro à pip installer mysqlclient
Obtenez des données d'un oscilloscope avec pyVISA
Ce que j'étais accro à Python autorun
[Note] Une histoire sur l'impossibilité de percer le proxy avec pip
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
J'ai pu me moquer d'AWS-Batch avec python, moto, donc je vais le laisser
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Une histoire à laquelle j'étais accro après la communication SFTP avec python