Reputation: 2100
I'm currently developing a social networking site and I'm currently implementing the part where a user can change his password. I'm using the entity manager to refresh the contents of the database with the new password. The following is the code for the implementation.
final Implementation user = em.find(Implementation.class, username);
if((user!=null) && user.getPassword().equals(hash(username,oldPassword))){
user.setPassword(hash(username,newPassword));
em.refresh(user);
}else{
throw new ChangePasswordException();
}
however when I try to login again, the older password must be used, otherwise, if the new password is supplied it will tell you: passwords do not match. Does anyone know maybe why this is happening? I tried to first remove the user from the database, and then persist the new user again. However an EJB Exception was generated as the username was not unique since the user was not removed from the database.
Thanks a lot for your help
Upvotes: 1
Views: 130
Reputation: 5649
You are not saving your new password. You are overwriting your changes you have made. So refresh(user)
will fetch the current state of that user and will write it into your object.
docu: Refresh the state of the instance from the database, overwriting changes made to the entity, if any.
Try to use merge
or persist
instead
Upvotes: 3