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.
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. Figure: Contenu du compte créé après la connexion sociale google (contrôle sur l'écran de gestion)
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
Pour contourner ce problème, vous pouvez appliquer l'une des deux méthodes suivantes.
SOCIALACCOUNT_PROVIDERS
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)
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.
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.
Recommended Posts