Fixes #5383: Fix setting user password via REST API

This commit is contained in:
Jeremy Stretch 2020-11-25 11:47:53 -05:00
parent f8b523b97b
commit 77bbe5730b
3 changed files with 28 additions and 2 deletions

View File

@ -1,5 +1,13 @@
# NetBox v2.9
## v2.9.11 (FUTURE)
### Bug Fixes
* [#5383](https://github.com/netbox-community/netbox/issues/5383) - Fix setting user password via REST API
---
## v2.9.10 (2020-11-24)
### Enhancements

View File

@ -19,9 +19,23 @@ class UserSerializer(ValidatedModelSerializer):
class Meta:
model = User
fields = (
'id', 'url', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'date_joined',
'groups',
'id', 'url', 'username', 'password', 'first_name', 'last_name', 'email', 'is_staff', 'is_active',
'date_joined', 'groups',
)
extra_kwargs = {
'password': {'write_only': True}
}
def create(self, validated_data):
"""
Extract the password from validated data and set it separately to ensure proper hash generation.
"""
password = validated_data.pop('password')
user = super().create(validated_data)
user.set_password(password)
user.save()
return user
class GroupSerializer(ValidatedModelSerializer):

View File

@ -22,15 +22,19 @@ class UserTest(APIViewTestCases.APIViewTestCase):
model = User
view_namespace = 'users'
brief_fields = ['id', 'url', 'username']
validation_excluded_fields = ['password']
create_data = [
{
'username': 'User_4',
'password': 'password4',
},
{
'username': 'User_5',
'password': 'password5',
},
{
'username': 'User_6',
'password': 'password6',
},
]