É uma prática ruim estender o documento do usuário do Mongoengine?
-
21-09-2019 - |
Pergunta
Estou integrando o MongoDB usando o Mongoengine. Ele fornece suporte de autenticação e sessão que uma configuração padrão de Pymongo não teria.
Na autenticação regular do Django, é considerado uma prática ruim estender o modelo de usuário, pois não há garantia de que ele seja usado corretamente em todos os lugares. É este o caso mongoengine.django.auth
?
Se isso é Considerado ruim prática, qual é a melhor maneira de anexar um perfil de usuário separado? Django tem mecanismos para especificar um AUTH_PROFILE_MODULE
. Isso também é apoiado em Mongoengine, ou devo fazer a pesquisa manualmente?
Solução
Mongoengine agora suporta AUTH_PROFILE_MODULE
https://github.com/ruandao/mongoengine_django_contrib_auth/blob/master/models.py#l134-163
Outras dicas
Nós apenas estendido a classe de usuário.
class User(MongoEngineUser):
def __eq__(self, other):
if type(other) is User:
return other.id == self.id
return False
def __ne__(self, other):
return not self.__eq__(other)
def create_profile(self, *args, **kwargs):
profile = Profile(user=self, *args, **kwargs)
return profile
def get_profile(self):
try:
profile = Profile.objects.get(user=self)
except DoesNotExist:
profile = Profile(user=self)
profile.save()
return profile
def get_str_id(self):
return str(self.id)
@classmethod
def create_user(cls, username, password, email=None):
"""Create (and save) a new user with the given username, password and
email address.
"""
now = datetime.datetime.now()
# Normalize the address by lowercasing the domain part of the email
# address.
# Not sure why we'r allowing null email when its not allowed in django
if email is not None:
try:
email_name, domain_part = email.strip().split('@', 1)
except ValueError:
pass
else:
email = '@'.join([email_name, domain_part.lower()])
user = User(username=username, email=email, date_joined=now)
user.set_password(password)
user.save()
return user
No Django 1.5, agora você pode usar um objeto de usuário configurável, por isso é um ótimo motivo para não usar um objeto separado e acho que é seguro dizer que não é mais considerado uma prática ruim estender o modelo de usuário se você estiver no Django <1,5 Mas esperando atualizar em algum momento. No Django 1.5, o objeto de usuário configurável é definido com:
AUTH_USER_MODEL = 'myapp.MyUser'
em seus configurações.py. Se você estiver mudando de uma configuração anterior do usuário, há alterações que nominam de coleta de impacto etc. Se você não deseja atualizar para 1,5 ainda, poderá estender o objeto do usuário por enquanto e depois atualizá -lo mais tarde quando o fizer Atualize para 1.5.
https://docs.djangoproject.com/en/dev/topics/auth/#auth-custom-user
NB Eu não tentei pessoalmente isso no Django 1.5 com o Mongoengine, mas espero que ele deva apoiá -lo.