Une façon de résoudre ce problème est PRÉPONDÉRANTS pipeline python-auth-sociale.
Vous pouvez remplacer create_user avec quelque chose comme:
def create_user(strategy, details, user=None, *args, **kwargs):
if user:
return {'is_new': False}
allowed_emails = get_list_of_emails()
fields = dict((name, kwargs.get(name, details.get(name)))
for name in strategy.setting('USER_FIELDS', USER_FIELDS))
if not fields:
return
if fields[email] in allowed_emails:
return {
'is_new': True,
'user': strategy.create_user(**fields)
}
return
Cette méthode get_list_of_emails()
doit être utilisé comme un moyen de charger les e-mails à partir du fichier de base de données UO. Il doit retourner une liste d'emails.
Puis, dans le SOCIAL_AUTH_PIPELINE dans les paramètres que vous remplacez la create_user à votre méthode personnalisée:
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'path.to.my.method.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
)
De cette façon, vous pouvez garder la liste blanche de domais, puis stocker les e-mails que vous voulez un endroit où vous pouvez les charger avec la méthode get_list_of_emails()
plus sur le docs
Cette liste vous dépend de domaine? Je veux dire, vous autorisez tous les e-mails provenant de domaines spécifiques ou seulement des adresses e-mail spécifiques? –
Je veux autoriser ** tout le monde ** pour @ companyname.net et seulement certains autres spécifiques d'autres domaines. –