Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Mongoengine身份验证_Django_Mongoengine - Fatal编程技术网

Django Mongoengine身份验证

Django Mongoengine身份验证,django,mongoengine,Django,Mongoengine,我已经成功地将django 2.0与mongoengine连接起来。除了身份验证部分,其他一切都正常工作。 在my settings.py中,我有以下内容: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', #For Mongo Authentication 'mongoengine.django.mongo_auth', 'django.contrib.contenttyp

我已经成功地将django 2.0与mongoengine连接起来。除了身份验证部分,其他一切都正常工作。 在my settings.py中,我有以下内容:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    #For Mongo Authentication
    'mongoengine.django.mongo_auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',

]
AUTH_USER_MODEL = 'mongo_auth.MongoUser'
MONGOENGINE_USER_DOCUMENT = 'mongoengine.django.auth.User'
我得到了以下错误

core/checks/registry.py", line 73, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/home/user/virtualenvs/project/lib/python3.5/site-packages/django/contrib/auth/checks.py", line 74, in check_user_model
    if isinstance(cls().is_anonymous, MethodType):
AttributeError: 'MongoUser' object has no attribute 'is_anonymous'

从上面的错误中,我看到问题出在AUTH_MODEL_用户的声明上。我没有创建任何自定义用户模型,因为我希望能够使用django.uath用户模型……我需要了解如何设置它,以及如何创建用户并让他们登录。我该怎么办

我理解使用Django作为ORM和已经为您预先构建的身份验证的吸引力。我以前使用过Django,但从未使用过Mongoengine。我知道Mongoengine对Django的支持尚未完成。我最近与Mongoengine在Flask中完成了一个项目,我建议您制作自己的用户模型。下面是我使用bcrypt对密码进行自动加密预保存的示例。您可能需要安装闪烁器库以获得信号支持

from mongoengine import Document, StringField
from mongoengine import signals // blinker library may need to be installed 
from bcrypt import hashpw, gensalt


class User(Document):
    first_name = StringField(required=True, max_length=50)
    last_name = StringField(required=True, max_length=50)
    username = StringField(unique=True, required=True, max_length=50)
    password = StringField(required=True, min_length=6)

    def to_json(self):
        return {
            "_id": str(self.pk),
            "first_name": self.first_name,
            "last_name": self.last_name,
            "username": self.username,
            "password": self.password
        }

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        hashed = hashpw(document.password.encode('utf8'), gensalt())
        document.password = hashed.decode('utf8')

signals.pre_save.connect(User.pre_save, sender=User)
我知道你可能会失去Django的一个好处,但在我看来,与学习Django的做事方式相比,拥有对用户模型的这种级别的控制使事情变得更容易。to_json()方法当然是可选的,它只是覆盖了Mongoengine的to_json(),使其更具可读性

要验证密码,请执行以下操作:

bcrypt.checkpw(password.encode('utf-8'), user.password.encode('utf-8'))

谢谢你这么好的回复。然而,我选择使用djongo而不是mongoengine。