openfire中用email作用户名注册的解决方案

用email作用户名的好处:当用户忘记密码时,可以通过邮箱进行密码修改。

 

步骤一:

       用户输入邮箱地址,客户端进行邮箱格式验证,并把邮箱发往服务器验证是否已注册。
       通过查找smack的API文档,我没有发现有专门的方法用于用户名唯一性的验证,倒是在注册的时候,如果用户名已存在,服务器会返回一个“conflict”的异常,通过这个异常可以判断用户名的唯一性。但向服务器提交注册请求得进行到第三步的时候才会进行,这时候用户已输入了邮箱验证码,昵称,密码等信息,如果这时候再告诉用户用户名已存在,那么用户之前的输入就全作废了,这样的用户体验无疑很不好,所以我们得在用户输入邮箱地址的时候即时验证用户名的唯一性,并把结果反馈给用户。
       通过不断地查找资料,最终发现org.jivesoftware.smackx.search.UserSearchManager这个类可以提供用户名,昵称,邮箱等信息的查找。但使用这个类有个前提:必须得通过用户验证。也就是说得登录之后才能使用这个类,否则服务器会返回“not-anthorized”的异常。由于我们是用于用户注册的过程中,不可能已经登录。于是又通过不断地查找smackAPI文档,最终发现了org.jivesoftware.smack.XMPPConnection.loginAnonymously()方法,看方法名我们可以知道该方法是用来进行匿名登录的,使用此方法的前提是服务器要开启对匿名登录的支持。
       用loginAnonymously()这个方法,然后通过使用UserSearchManager类确实能够查找服务器中的用户名,但是用邮箱作用户名,则会查找不到,这是因为在XMPP协议中,用户名都是采用JID(username@domain/resource)的格式,邮箱地址中的“@”符号与JID中的“@”符号存在冲突。当然,smack的API也考虑到了用邮箱作用户名这一点,提供了org.jivesoftware.smack.util.StringUtils.escapeNode()这个方法进行邮箱地址的换码,即把邮箱地址中的“@”换成“\40”,这样就解决了与JID中“@”冲突的问题。遗憾的是,即使这样依然无法查找到邮箱用户名,但是却可以查找邮箱。于是解决方案来了,进行用户注册的时候,邮箱保持与用户名一致,通过查找邮箱来查找用户名。

注意:

1. 不能重复进行匿名登录,否则会出现异常。

2. XMPPConnection的disconnect(),connect()并不能保证匿名登录的注销,必须得disconnect()后重新进行连接的初始化。

步骤二:

         用户输入邮箱中的验证码,点击“下一步”。

 

步骤三:

         用户输入昵称,密码等信息提交注册。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值