django 未知的密码散列算法,PASSWORD_HASHERS设置-使用factory boy

ee7vknir  于 2023-01-27  发布在  Go
关注(0)|答案(3)|浏览(135)

如果我为测试创建示例用户帐户,则会出现此错误:
未知的密码哈希算法“password1”。是否在PASSWORD_HASHERS设置中指定了该算法?

class ExampleTest(TestCase):
    def test_sample_data(self):
        for i in range(0,1):
            user = content.factories.UserFactory.create()

factories.py:

class UserFactory(factory.Factory):
    FACTORY_FOR = User

    username = factory.Sequence(lambda n: 'User' + n)
    email = 'mail@gmail.com'
    password = 'password1'

怎么解决呢?

nhaq1z21

nhaq1z211#

**更新。**文档中有说明,您应使用factory.PostGenerationMethodCall

class UserFactory(factory.Factory):
    class Meta:
        model = User

    username = 'user'
    password = factory.PostGenerationMethodCall('set_password',
                                                'defaultpassword')

旧答案。实际上,这在factory-boy文档中有描述:

class UserFactory(factory.Factory):
    @classmethod
    def _prepare(cls, create, **kwargs):
        password = kwargs.pop('password', None)
        user = super(UserFactory, cls)._prepare(create, **kwargs)
        if password:
            user.set_password(password)
            if create:
                user.save()
        return user

最好使用此解决方案,这样您就可以正确使用UserFactory.build()UserFactory.create()UserFactory.attributes()(稍后将返回未散列的密码)

a5g8bdjr

a5g8bdjr2#

class UserFactory(factory.Factory):
    FACTORY_FOR = User

    username = 'user'
    password = factory.PostGenerationMethodCall('set_password',
                                            'defaultpassword')

请参阅此处的文档https://factoryboy.readthedocs.org/en/v1.3.0/reference.html#postgenerationmethodcall

9ceoxa92

9ceoxa923#

user = content.factories.UserFactory.create()
user.set_password('yourpassword')
user.save()

此答案作为未知密码哈希算法问题的edit发布。PASSWORD_HASHERS设置-在CC BY-SA 3.0下由OP edekmax使用工厂男孩。

相关问题