discuz java版_java整合discuz单点登录 | 邹颢的博客

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

api

com.fivestars.interfaces.bbs.api.UC

2

api

/api/uc.php

4:配置config.properties

PHP

1

2

3

4

5

UC_API = http://localhost/discuz/uc_server

UC_IP =

UC_KEY =x2ydu036Ubtf55gfyf2bR7Mc62v2a7J7rcrdA9Ncx259B323wegb87P5l7CaYd34

UC_APPID = 2

UC_CONNECT =

UC_API就是ucenter的路径

UC_IP可以不填,会自动根据域名解析该IP

UC_KEY就是通讯密钥

UC_APPID就是ucenter添加应用的ID

配好就可以,通讯就应该成功了.

如果不成功,请添加ip.还有注意config.properties的路径,我是自己修改了名字和路径..修改路径的话记得去Client.java里修改路径,因为它这里会读取config.properties

接下来就是关于discuz-api-for-java的一些api

1:同步注册

Java

1

2

3

4

5

6

7

8

9

10

11

Client discuzClient = new Client();

discuzClient.uc_user_register("zhangsan","password","zouhao619@gmail.com");

/**

-1 : 用户名不合法

-2 : 包含不允许注册的词语

-3 : 用户名已经存在

-4 : email 格式有误

-5 : email 不允许注册

-6 : 该 email 已经被注册

>1 : 表示成功,数值为 UID

*/

2:同步登陆

Java

1

2

3

4

5

6

Client discuzClient = new Client();

String loginResult = discuzClient.uc_user_login("zhangsan","password");//根据账户密码获取用户相关信息

LinkedList userInfo=XMLHelper.uc_unserialize(loginResult);

uid=Integer.valueOf(userInfo.get(0));//获取用户的ID

String $ucsynlogin = discuzClient.uc_user_synlogin(uid);//根据ID进行同步登陆

response.getWriter().print($ucsynlogin);//把$ucsynlogin输出到页面上就行了.这样就实现了同步登陆,实际上就是一个script标签可以进行跨域的功能

注意事项:

1:ucenter->注册设置->是否允许同一个email注册多个用户根据自己的实际情况来决定

2:同步注册后,需要到discuz登录一次,才能实现同步登录.如果进行同步注册后,账户没有登录,那么也无法实现同步登录,如果你要实现同步注册后,就能登录.就修改uc_server/model/user.php第129行左右的add_user($username, $password, $email, $uid = 0, $questionid = ”, $answer = ”, $regip = ”)方法

修改为如下内容:

PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {

$regip = empty($regip) ? $this->base->onlineip : $regip;

$salt = substr(uniqid(rand()), -6);

$password = md5(md5($password).$salt);

$sqladd = $uid ? "uid='".intval($uid)."'," : '';

$sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";

$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");

$uid = $this->db->insert_id();

$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");

//begin

$this->db->query("INSERT INTO `discuz`.dz_common_member SET uid='$uid', username='$username', password='$password', email='$email', adminid='0', groupid='10', regdate='".$this->base->time."', credits='0', timeoffset='9999'");

$this->db->query("INSERT INTO `discuz`.dz_common_member_status SET uid='$uid', regip='$regip', lastip='$regip', lastvisit='".$this->base->time."', lastactivity='".$this->base->time."', lastpost='0', lastsendmail='0'");

$this->db->query("INSERT INTO `discuz`.dz_common_member_profile SET uid='$uid'");

$this->db->query("INSERT INTO `discuz`.dz_common_member_field_forum SET uid='$uid'");

$this->db->query("INSERT INTO `discuz`.dz_common_member_field_home SET uid='$uid'");

$this->db->query("INSERT INTO `discuz`.dz_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");

//end

return $uid;

}

在添加到ucenter的同时添加到discuz表中.

3:如果你要实现同步登录,在页面输出discuzClient.uc_user_synlogin(uid),他其实是一段script,用来跨域访问的.但是有可能由于网络原因,你还没有发出这个请求,你就先跳转页面了.所以造成无法同步登录.

我用的方法是,用jquery.$.script()方法来加载这个js,由于是跨域,$.script()无法有返回,这个时候需要在php服务器端设置

PHP

1

header("Access-Control-Allow-Origin:*"); //允许任何访问(包括ajax跨域)

详细代码如下:

JavaScript

1

2

3

4

5

6

7

$(function(){

$.getScript('script的目标url', function(){

location.href='bbs路径';

});

});

确定执行完了这个js同步登录后,在执行location进行跳转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值