项目准备整合 discuz, 因此下了个 discuz x2. 整合使用的是 http://code.google.com/p/discuz-ucenter-api-for-java/ 这儿的代码,一切都配好了运行 Jsp_demo.jsp 也显示登陆成功。
问题来了:按照我的理解,和 UCenter 登陆通信完后应该可以在响应中输出一个 iframe 或者 script 链到 discuz,里面会发送一个请求到 discuz,discuz 会返还 cookie 的设置,实现跨域登陆,不过这一个 script 该如何构建?
按照 http://www.iteye.com/topic/895086 的例子,应该输出类似
[code="javascript"]
[/code]
的字符串,不过这个字符串该如何构造?
另外如果整合的话 discuz 是否有地方统一配置登陆和注册链接,避免自己去修改 discuz 代码?
呵呵。。
Client e = new Client();
1、String result = e.uc_user_login(account, password);返回的的确是如下格式xml文件、抱歉!上面说的太抽了。
<?xml version="1.0" encoding="ISO-8859-1"?><![CDATA[259]]><![CDATA[username]]><![CDATA[username]]><![CDATA[email]]><![CDATA[0]]>
但这是必须得,;;
discuz提供了一个Client工具类(里面包含了一些解析工具类)、因为你要将result这串xml文件中的有用数据取出来LinkedList rs = XMLHelper.uc_unserialize(result);并放入一个LinkedList的集合中、类似:[uid, username, username, email, 0]、然后从这个集合中取出用户的id,int uid = Integer.parseInt(rs.get(0));、然后获取同步登陆脚步,就是所谓的js脚步,String synLoginScript = e.uc_user_synlogin(login);
呵呵,,
public String synLogin(String account,String password) throws Exception {
Client e = new Client();
String result = e.uc_user_login(account, password);//登录
LinkedList<String> rs = XMLHelper.uc_unserialize(result);//解析xml
int login = Integer.parseInt(rs.get(0));//取用户id
if(login==-1 || login==-2){//自定义判断
return null;
}
return e.uc_user_synlogin(login);//取脚步并返回
}
网站整合discuz还是挺简单的。。根本不用修改discuz的代码。
1、web与forum最好在同一根域名下、这样写cookie才能共享。
2、这串字符串是一个同步脚本、不需要自己构造、Ucenter会构造。这串字符串是在你请求同步登陆、或退出成功的时侯Ucenter构造返回给你,你在页面执行这段js脚本即可、这段js脚本目的就是发送一个请求到discuz的某个页面写几个cookie而已、没什么作用。如果写cookie成功、进入论坛自然就不用再登录一次了,,否则进入论坛还是要登录一次的,,,呵呵呵呵,,,
3、记着在论坛的根目录下的config.inc.php文件中配置cookie的作用域...
4、在Ucenter中有可能需要2个应用并开启同步功能(2个应用可以是一样的)、才能同步成功,
2、discuz登陆时不会发请求到我的应用来、除非手动配置(这个麻烦且不爽)。 从这个问题上、是否想实现双向同步?
有2中情况如下:
一、在我的应用登陆(应用向discuz同步:单向同步)
在我的应用登陆时同步登陆discuz并成功执行discuz返回的同步脚本、此刻进入discuz就无需再次登陆了,因为执行了同步脚本。
二、在discuz或我的应用登陆(双向同步):
因discuz同步基本基于cookie、所以简单的从cookie入手。
单项同步无非就是去discuz写几个cookie而已、cookie如果写成功、
那么进入discuz就无需登陆了、呵呵,
既然如此,就双向同步[1,2]
【1(我的应用向discuz同步):在我的应用登陆时同步登陆discuz并成功执行discuz返回的同步脚本写cookie,2(discuz向我的应用同步):在discuz登陆时也可以写cookie、在我的应用中取出来就行了】 。。
呵呵。。