user1746291
user1746291

Reputation: 333

Issues with auth_user table in django

I want to update some fields of auth_user table in django. Actually i am migrating some users from one website to another so i want to update the password field in auth_user table.But when i am using the update query it gives me some errors

some things which i have tried

values=User.objects.get(username=request.POST['username'])
        values.password=request.POST['password']
        values.password.save()

it gives the error of 'unicode' object has no attribute 'save

and if i tried this one

values=User.objects.get(username=request.POST['username']).update(password=request.POST['password'])

then the error is 'User' object has no attribute 'update'

actually i do not want to send emails to users to update their password and redirect them to forgot password page. But whenever user try to login to site and if his password do not match but he typed the password correctly but due to migration his password do not work in django then the password he enters must be updated in auth_user table(encrypted password).

In between i have ensure that this user is the authenticate user of previous site.

So please suggest me some way so that i can update his password in auth_user table.

Upvotes: 0

Views: 809

Answers (2)

Himanshu
Himanshu

Reputation: 32602

(On behalf of OP)

I used this and the problem is solved

u = User.objects.get(username__exact='john')
u.set_password('new password')
u.save()

Upvotes: 0

Jacek Chmielewski
Jacek Chmielewski

Reputation: 1793

Passwords in django are stored as sha256 hashes, so setting

user.password = 'new password'

is not a good idea. Fortunately django has methods that would take care of hashing your password. Second thing:

values.password.save()

Here you are trying to execute save() method on password object which is a string, not a user object. values.save() would be better, but still not correct. What you want to do is this:

values.set_password('new password') # Takes care of hashing
values.save()

More on the topic in django documentation

Upvotes: 3

Related Questions