openfire中用email作用户名注册的解决方案
来源:互联网 发布:专用发票数据导出 编辑:程序博客网 时间:2024/05/21 20:29
用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
- openfire中用email作用户名注册的解决方案
- Linux中用户名和用户组的管理
- AJAX中用户名校验
- 能用的Myeclipse Svn中用户名和密码修改
- tomcat中用户名及密码设置的一些问题详解
- form表单中用户名和密码对齐的简单实现
- 解决jsp中用户名是中文名的中文乱码问题
- 更改Linux终端中用户名的显示颜色
- Axis中用户名、密码传递
- MySQL中用户名定义上的细节可能导致的错误
- html表单中用户名密码输入框的长度不一样的解决方法
- java中用户名与密码和数据库连接的两种方式
- 大型票务系统中用户名和密码的安全性问题
- proxool配置文件中用户名和密码使用加密后的密文(安全测评)
- openfire ping的smack解决方案
- 带email认证的用户注册网站
- 解决在ide数据库中用户名root 密码root 而在自己mysql上密码输入root连不上的问题
- [Email]各种问题的分析和解决方案
- [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
- 神挡杀神
- 从零开始学android<ListView数据列表显示组件.二十一.>
- hdu 1559最大子矩阵
- MySQL 重设root密码
- openfire中用email作用户名注册的解决方案
- 队列之链队列
- 2014.07
- PL/SQL 学习笔记
- Git-创建版本库
- oracle merge into 的用法详解+实例
- HDU1529 Cashier Employment
- 决策树绘图(python)
- 评一名青鸟学生的学习