登录到数据库时,Django rest框架不加密密码

Posted

技术标签:

【中文标题】登录到数据库时,Django rest框架不加密密码【英文标题】:Django rest framework not encrypting passwords, when being logged into the database 【发布时间】:2015-04-07 23:39:05 【问题描述】:

所以我使用带有基本身份验证的 Django(1.7 和 postgres)Rest Api(Django REST framework 3.0.2)来注册和验证我的移动测试应用程序的用户。问题是我通过管理面板创建的用户加密了他们的密码,但是当我创建用户时,使用 rest-framework 到同一个“用户”(默认)数据库中,密码没有被加密。这给我们带来了几个问题(尤其是验证用户从 api-token-auth 获取令牌)。有什么我可以做的吗?也许在设置中? (我们也在我们的服务器上运行 gunicorn 和 ngnix)。 非常感谢!

【问题讨论】:

【参考方案1】:

简单的方法

class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
    model = User
    fields = ['email', 'username', 'password']
    extra_kwargs = 'password': 'write_only': True

def create(self, validated_data):
    user = User(
        email=validated_data['email'],
        username=validated_data['username']
    )
    user.set_password(validated_data['password'])
    user.save()
    return user

【讨论】:

【参考方案2】:

听起来您只是在使用 ModelSerializer 和 ModelViewSet。您将不得不覆盖 ModelSerializer 的 create 方法。

def create(self, validated_data):
    user = User(
        email=validated_data['email'],
        username=validated_data['username']
    )
    user.set_password(validated_data['password'])
    user.save()
    return user

ModelSerializer 的 doc 有一个可能有用的示例。

【讨论】:

以上是关于登录到数据库时,Django rest框架不加密密码的主要内容,如果未能解决你的问题,请参考以下文章

如何在django rest框架中创建加密密码[重复]

使用 django rest 框架进行单点登录服务的任何可能方式?

Django rest框架登录后获取JWT令牌

Django Social登录/注册使用rest框架

如何在不登录 jwt django rest-framework 的情况下获取请求数据

Django REST 框架、JWT 和 request.session