J'ai django social-auth installé (de omab) et les utilisateurs ont une adresse e-mail dans la base de données que je veux garder, mais quand les utilisateurs se connectent de facebook utilisant social-auth, leur email est remplacé par celui qu'ils ont dans leur compte Facebook. Je ne suis pas sûr que les paramètres sont ceux par défaut ou non et ne peut pas trouver comment arrêter ce comportement.Comment ne pas définir l'adresse e-mail de l'utilisateur dans django social-auth
Répondre
je l'ai trouvé, dans le pipeline le responsable de c'est
social_auth.backends.pipeline.user.update_user_details
Je viens retiré de la canalisation et maintenant les détails comme l'adresse e-mail et le nom sont laissés à l'utilisateur de remplir.
Je poste ma solution (mise à jour des détails de l'utilisateur, pas les écraser) afin que cela puisse aider quelqu'un. Sur la base de pipeline.user.update_user_details
I codé comme suit:
def fill_user_details(backend, details, response, user, is_new=False, *args,
**kwargs):
"""Fills user details using data from provider, without overwriting
existing values.
backend: Current social authentication backend
details: User details given by authentication provider
response: ?
user: User ID given by authentication provider
is_new: flag
source: social_auth.backends.pipeline.user.update_user_details
"""
# Each pipeline entry must return a dict or None, any value in the dict
# will be used in the kwargs argument for the next pipeline entry.
#
# If any function returns something else beside a dict or None, the
# workflow will be cut and the value returned immediately, this is useful
# to return HttpReponse instances like HttpResponseRedirect.
changed = False # flag to track changes
for name, value in details.iteritems():
# do not update username, it was already generated
if name in (USERNAME, 'id', 'pk'):
continue
# set it only if the existing value is not set or is an empty string
existing_value = getattr(user, name, None)
if value is not None and (existing_value is None or
not is_valid_string(existing_value)):
setattr(user, name, value)
changed = True
# Fire a pre-update signal sending current backend instance,
# user instance (created or retrieved from database), service
# response and processed details.
#
# Also fire socialauth_registered signal for newly registered
# users.
#
# Signal handlers must return True or False to signal instance
# changes. Send method returns a list of tuples with receiver
# and it's response.
signal_response = lambda (receiver, response): response
signal_kwargs = {'sender': backend.__class__, 'user': user,
'response': response, 'details': details}
changed |= any(filter(signal_response, pre_update.send(**signal_kwargs)))
# Fire socialauth_registered signal on new user registration
if is_new:
changed |= any(filter(signal_response,
socialauth_registered.send(**signal_kwargs)))
if changed:
user.save()
Avez-vous essayé SOCIAL_AUTH_PROTECTED_USER_FIELDS? :)
A partir du manuel:
Le processeur de pipeline update_user_details établira certains champs objets utilisateur, tels que le courrier électronique. Réglez ce paramètre sur une liste de champs que vous ne souhaitez définir pour les utilisateurs nouvellement créés:
SOCIAL_AUTH_PROTECTED_USER_FIELDS = [ « email »,]
également des valeurs plus supplémentaires seront stockées si défini. Les détails concernant ce paramètre sont répertoriés ci-dessous dans les sections OpenId et OAuth.
aujourd'hui, je ferais certainement cela, mais de retour dans les jours C'était une autre histoire :) Les champs protégés n'ont pas encore été introduits. – Bastian
Oui, je sais. J'essayais de le résoudre hier et j'ai presque opté pour la solution de glarrain. Ensuite, j'ai trouvé ces paramètres dans le manuel. Il suffit de le mettre ici au cas où quelqu'un TL; DR le manuel :) –
yep! vous a donné +1 – Bastian
- 1. Confusion sur l'utilisation django socialauth
- 2. Email Django pas envoyé
- 3. Email Django Céleri, céleri ne fonctionne pas
- 4. Django socialauth: quelle est la meilleure fourchette?
- 5. Email templating dans django
- 6. Django-Socialauth ou django-social-auth, lequel est le meilleur?
- 7. django-registration ne peut pas définir l'adresse e-mail "from" pour l'authentification email
- 8. Je ne peux pas trouver le bouton facebook en utilisant django-socialauth
- 9. Comment stocker un email complet dans django
- 10. Vérifier Email Exists dans Django
- 11. Django + socialauth: se connecter avec openid ou admin
- 12. comment définir destinataire Email IOS
- 13. djangoappengine email ne pas arriver
- 14. Pourquoi Django ne me laisse pas faire email = models.ManyToManyField (models.EmailField)?
- 15. SocialAuth: Invalid Scopes: read_stream
- 16. django-registration Email Personnalisations
- 17. Django Fileupload Avec Email
- 18. Comment résoudre Socialauth-Android pour twitter?
- 19. application Android pour socialauth
- 20. Email magento ne fonctionne pas
- 21. Comment personnaliser backend email pour EmailMultiAlternatives dans Django
- 22. Django et SQLite email authentification
- 23. rails ne pas envoyer email
- 24. Email ne pas envoyer correctement
- 25. Email CodeIgniter ne fonctionne pas
- 26. opencart email ne fonctionne pas
- 27. PHP Email ne fonctionne pas
- 28. email PHP ne fonctionne pas
- 29. django-notifications n'envoyer aucun email
- 30. email flacon ne pas envoyer
Hi. Comment exactement puis-je implémenter la solution que vous avez postée ci-dessus dans mon application Django? Où exactement devrait aller le code ci-dessus? –
@ArpitRai Si vous avez une version relativement nouvelle de 'social-auth' je vous recommande d'utiliser la réponse de Zhe (http://stackoverflow.com/a/16267281/556413) – glarrain