Java整合Discuz同步登录注意事项

笔者是写Java的,之前也没碰过PHP和Discuz,在整合登录的时候碰到了不少坑,在这里记录下

Java整合Discuz同步登录

具体代码和逻辑见一下连接 http://www.cnblogs.com/netWild/archive/2013/06/28/3161164.html

个人整合时碰到的问题

首次访问时速度很慢

使用上面链接中的Demo时,在第一次调用的时候会卡上2分钟左右,控制台打印以下信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] milliseconds

有两种解决办法:

1)在Tomcat环境中解决 可以通过配置JRE使用非阻塞的Entropy Source。 在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。 加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

2)在JVM环境中解决 打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容: securerandom.source=file:/dev/urandom 替换成 securerandom.source=file:/dev/./urandom

参考连接:http://blog.csdn.net/trackal/article/details/52597645

调用登录返回html后页面报错

查看网页源码,发现script请求地址为127.0.0.1

解决方法: 进入UCenter中,在应用管理中将Discuz的访问路径配置为论坛访问地址

调用登录后返回html空白页

虽然显示空白页,但是登录状态已经同步到Discuz了,只需要刷新下Discuz页面即可。 这里个人的解决方法是: 第一种方法:当调用Discuz登录接口返回script字符串后,在后端手动处理,添加一段跳转JS,这样页面会自动跳转到目标地址。

第二种方法:本质上Discuz就是通过script标签的跨域性来请求目标接口实现传递登录状态,可以在后端截取该url,返回给前端,由前端处理。

登录script执行成功后,Discuz仍然没有登录状态?

因为通过同步注册接口进行注册的用户没有激活,所以需要手动在Discuz登录一次激活,同步登录才会生效。

Discuz登录后自动激活设置

这样设置后,只是在Discuz登录的时候不需要手动输入验证码来激活,但上面的问题还没有解决。

同步注册后自动激活

//打开discuz/api/uc.php
//synlogin方法(180行)处,往下找到
if(($member = getuserbyuid($uid, 1))) {
    dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
}


//改为
if(($member = getuserbyuid($uid, 1))) {
    dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
} else {
    if(!function_exists('uc_get_user')) {
        loaducenter();
    }
    $user = uc_get_user($uid, 1);
    if($user) {
        $time = time();
        DB::query("REPLACE INTO ".DB::table('common_member')." SET `uid`='{$user[0]}' , `username`='{$user[1]}' , `password`='".md5(random(10))."' , `email`='{$user[2]}' , `adminid`='0' , `groupid`='10' , `regdate`='{$time}' , `emailstatus`='0' , `credits`='0' , `timeoffset`='9999'");
        DB::query("REPLACE INTO ".DB::table('common_member_status')." SET `uid`='{$user[0]}' , `regip`='{$_G['clientip']}' , `lastip`='{$_G['clientip']}' , `lastvisit`='{$time}' , `lastactivity`='' , `lastpost`='0' , `lastsendmail`='0'");
        DB::query("REPLACE INTO ".DB::table('common_member_count')." SET `uid`='{$user[0]}' , `extcredits1`='0' , `extcredits2`='0' , `extcredits3`='0' , `extcredits4`='0' , `extcredits5`='0' , `extcredits6`='0' , `extcredits7`='0' , `extcredits8`='0'");
        DB::query("REPLACE INTO ".DB::table('common_member_profile')." SET `uid`='{$user[0]}'");
        DB::query("REPLACE INTO ".DB::table('common_member_field_forum')." SET `uid`='{$user[0]}'");
        DB::query("REPLACE INTO ".DB::table('common_member_field_home')." SET `uid`='{$user[0]}'");
        DB::query("UPDATE ".DB::table('common_stat')." SET `register`=`register`+1 WHERE `daytime` = '".date('Ymd', $time)."'");
        if(($member = getuserbyuid($uid, 1))) {
            dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
        }
    }
}

修改完后,同步注册后就会直接激活了,现在调用同步登录后就能直接同步登录状态了。

参考连接:http://blog.csdn.net/dongsg11200/article/details/24609783

同步注册后自动激活(第二种方法)

多程序整合 UCenter,在新用户首次注册后是没有同步登录到其它程序的,也就是说用户得在其它程序用密码再登录一次,以后才能同步登录,还有就是用户不是在 Discuz 程序注册的话,在 Discuz 登录时得手动激活,这些都导致用户体验很不好,不过解决方法很简单~ 修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码 如 Discuz X 的:多程序整合 UCenter,在新用户首次注册后是没有同步登录到其它程序的,也就是说用户得在其它程序用密码再登录一次,以后才能同步登录,还有就是用户不是在 Discuz 程序注册的话,在 Discuz 登录时得手动激活,这些都导致用户体验很不好,不过解决方法很简单~ 修改各个程序目录下的 ./uc_client/model/user.php 文件,大概在 129 行处的 function add_user 函数里添加代码 如 Discuz X 的: Discuz 的参数比较多,dbname 是数据库名,.pre_ 是表前缀,按自己的情况修改

$this->db->query("INSERT INTO `dbname`.pre_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 `dbname`.pre_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 `dbname`.pre_common_member_profile SET uid='$uid'");
$this->db->query("INSERT INTO `dbname`.pre_common_member_field_forum SET uid='$uid'");
$this->db->query("INSERT INTO `dbname`.pre_common_member_field_home SET uid='$uid'");
$this->db->query("INSERT INTO `dbname`.pre_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");

我的是Discuz3.4,按照这种方法修改后并没有效果,可能是版本不同?。

参考连接:http://blog.csdn.net/iastro/article/details/52587643 参考连接2:https://www.cnblogs.com/seaning/p/3993068.html

转载于:https://my.oschina.net/u/2302882/blog/1571181

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值