Discuz论坛与第三方应用同步登录注册

时间:2015-06-25所属栏目: discuz教程 来源: 网络整理 热度:

Discuz论坛与第三方应用同步登录注册

1.Discuz版本

我安装的Discuz是目前比较新的3.2版本。安装完以后UCenter已经安装好了。

2.第三方应用站点

自己开发的简单的web应用平台系统。

3.UCenter添加应用

3.1进入UCenter,http://***:8088/bbs/uc_server,***代表UCenter所在服务器ip地址或者域名,Apache端口默认的是80,由于需要,我把端口改成了8088(修改方法会在别的博文中叙述)。

3.2登录成功以后选择应用管理选项,点击添加应用按钮,自定义安装。

一般只需要填写应用名称、应用的主 URL、通信秘钥,然后选择开启同步登录和接收消息为是

3.4提交保存应用

4.第三方应用的配置

4.1添加配置文件

在主目录下添加配置文件,名称为config.properties,内容如下:

  1. #uc server url 
  2. UC_API = http://localhost/uc 
  3. #uc ip address 
  4. UC_IP = 
  5. #key通信秘钥 
  6. UC_KEY = 12345 
  7. #appid,UCenter中第三方应用的ID 
  8. UC_APPID = 3 
  9. #connect mode: default value is "" 
  10. UC_CONNECT = 

4.2配置web.xml

在web.xml中添加如下代码

Discuz论坛与第三方应用同步登录注册

4.3添加同步登录所需jar包jar包源码下载地址

4.4同步登录代码示例:

  1. Client e = new Client(); 
  2. String result = e.uc_user_login("username""password");   
  3. LinkedList rs = XMLHelper.uc_unserialize(result); 
  4.  if(rs.size()>0){   
  5.  int $uid = Integer.parseInt(rs.get(0)); 
  6. String $username = rs.get(1); 
  7. String $password = rs.get(2); 
  8. String $email = rs.get(3); 
  9.  if($uid > 0) {   
  10. System.out.println("登录成功"); 
  11. System.out.println($username); 
  12.  System.out.println($password); 
  13.  System.out.println($email);   
  14. String $ucsynlogin = e.uc_user_synlogin($uid); 
  15. System.out.println("登录成功"+$ucsynlogin);   
  16. //本地登陆代码 //TODO ... ....   
  17. else if($uid == -1) {   
  18. System.out.println("用户不存在,或者被删除");   
  19. else if($uid == -2) {   
  20. System.out.println("密码错");   
  21. else {   
  22. System.out.println("未定义");   
  23. }  //开源软件:phpfensi.com 
  24. }else{   
  25. System.out.println("Login failed"); System.out.println(result);   
  26. }  

4.5同步注册代码示例:

  1. String $returns = uc.uc_user_register(user.getUsername(), "***", user.getEmail());   
  2.         int $uid = Integer.parseInt($returns);   
  3.         if ($uid <= 0) {   
  4.             if ($uid == -1) {   
  5.                 System.out.print("用户名不合法");   
  6.             } else if ($uid == -2) {   
  7.                 System.out.print("包含要允许注册的词语");   
  8.             } else if ($uid == -3) {   
  9.                 System.out.print("用户名已经存在");   
  10.             } else if ($uid == -4) {   
  11.                 System.out.print("Email 格式有误");   
  12.             } else if ($uid == -5) {   
  13.                 System.out.print("Email 不允许注册");   
  14.             } else if ($uid == -6) {   
  15.                 System.out.print("该 Email 已经被注册");   
  16.             } else {   
  17.                 System.out.print("未定义");   
  18.             }   
  19.         } else {   
  20.             System.out.println("OK:" + $returns);   
  21.         } 

4.6登出代码示例:

  1. Client uc = new Client();   
  2.        //setcookie('Example_auth', '', -86400);   
  3.        //生成同步退出的代码   
  4.        String $ucsynlogout = uc.uc_user_synlogout(); 
  5.        System.out.println("退出成功"+$ucsynlogout);   
  6.           
  7.        if ($ucsynlogout != null) {   
  8.            HttpServletResponse res = getResponse();   
  9.            System.out.println($ucsynlogout);   
  10.            res.reset();   
  11.               
  12.            res.setContentType("text/html");   
  13.            res.setCharacterEncoding("utf-8");   
  14.            res.getWriter().write("成功登出" + $ucsynlogout);   
  15.   
  16.            return null;   
  17.        }

基本上Discuz论坛的同步登录注册和退出的功能就如上所述,有几点需要注意.

1,是在同步登录时返回的结果$ucsynlogin中,是一串包含两个script标签的字符串,需要先执行一下第一个script标签中的src之后才能同步登录成功,否则失败,原因是这段代码是为了向Discuz论坛里写入登录信息,至于以什么样的方式执行需要自己定义,我是直接解析到这段字符串到前台页面执行。

2,是同步注册后的用户并没有直接添加到用户表了,而是需要用新注册的用户登录一下论坛进行一下激活才能使用,可以通过修改UCenter的配置来解决这个问题,用管理员登录论坛进入管理中心选择站长选项,选择UCenter设置是否允许其他应用的会员在站点激活:和是否允许直接激活都选择是,然后提交就行。

3.UCenter提供了域名解析服务,可以添加域名解析,把域名解析成ip地址.

敬告:文章来源于网络 仅供个人学习和参考 版权归属作者所有 禁止商业用途转载!
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)