For changing logged in user's password, we need to query jabber:iq:register along with the username and new password of the user.
Here is the Objective-C code to send this password change query stream element.
DDXMLElement *iq = [DDXMLElement elementWithName:@"iq"];
[iq addAttributeWithName:@"type" stringValue:@"set"];
[iq addAttributeWithName:@"to" stringValue:[self appDelegate].hostName];
[iq addAttributeWithName:@"id" stringValue:@"changepassword"];
DDXMLElement *query = [DDXMLElement elementWithName:@"query"];
[query addAttributeWithName:@"xmlns" stringValue:@"jabber:iq:register"];
DDXMLElement *username = [DDXMLElement elementWithName:@"username"];
[username setStringValue:userName];
[query addChild:username];
DDXMLElement *password = [DDXMLElement elementWithName:@"password"];
[password setStringValue:newPass];
[query addChild:password];
[iq addChild:query];
[[[self appDelegate] xmppStream] sendElement:iq];
'chanepassowrd' is my custom ID I have given for this query. So that in the didReceiveIQ delegate method, I can check with this ID for password change.
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{
NSString *iqID = [[iq attributeForName:@"id"] stringValue];
if([iqID isEqualToString:@"changepassword"]){
//Password change is successful!
}
}
Hope this post is useful. Feel free to comment in case of any queries.
No comments:
Post a Comment