登录到数据库时,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 框架进行单点登录服务的任何可能方式?