浏览 1874 次 / [ 天下网闻 ] DISCUZ存档表会员无法使用QQ登陆问题解决方法
  • 发布时间 2017-04-24 04:01
  • 版本:Discuz! X3.2
    “您的QQ账号在本站注册的账号数量达到上限,请绑定已有账号,或更换其他QQ账号”

    ---------------------------------------------------------------------------------------------------------

    本文算是一个历程,有点啰嗦,着急的朋友直接看红字。

    此问题遇到已经大半年,摸索了一段时间才发现是存档表问题,DZ用户表分为主表和存档表,系统会将一段时间未登录的会员转到存档表中,当会员重新登录后,账号会自动从存档表转回主表,这种机制对性能和资源占用有一定好处。


    但是DZ又有一个致命的BUG官方一直没有解决:

    存档表中已经绑定过QQ的会员,重新使用QQ登录的时候会遇到错误提示:“您的QQ账号在本站注册的账号数量达到上限,请绑定已有账号,或更换其他QQ账号”
    很多用户不懂的使用用户名+密码方式登录,或者已经忘记了登陆密码,找回密码又不懂的解决绑定问题,所以只能写个公告,再用管理员帮会员重置密码,并教他们到个人设置里解除绑定再重新绑定,期间又需要重复登陆。导致存档表老用户基本都流失了。




    首先尝试过合并主表和存档表,但是因为之前彻底删除过几千个垃圾账号,

    比如某垃圾账号的UID是9527,用户名是张三,张三被彻底删除后这个UID9527被新注册的李四使用,而用户表里已经有了另一个同样叫做李四这个账号,DZ无法识别主表与存档表之间的用户名重复。

    这直接导致我在合并主表和存档表的时候出现同名用户而错误中止。本想解决用户名重复的问题,却发现部分已经被从存档表合并到主表的用户,依然无法重新用QQ登陆。


    ---------------------------------------------------------------------------------------------------------


    之前的解决思路是利用搜索存档表会员功能筛选,在会员搜索结果页增加一个批量解除QQ绑定的按钮,此按钮调用的是编辑用户中的解除QQ绑定。运行完成后打开用户资料发现已经成功解除绑定,重置了几个存档表僵尸号的密码,用该账户登陆后发现QQ依然处于绑定状态。也就是说,这些会员用QQ登陆的时候还是会遇到上面的错误提示。

    ---------------------------------------------------------------------------------------------------------

    最终的修改方法是后台 >  站长  >  数据库  >  升级   :填写以下代码:

    UPDATE `pre_common_member_archive` SET `conisbind` = replace (`conisbind`,'1','0')

    DISCUZ存档表会员无法使用QQ登陆问题解决方法.png
    Discuz! 数据结构升级成功,影响的记录行数 27872.png

    其中pre_common_member_archive是存档表,conisbind是QQ绑定状态字段名,1是绑定状态,0是未绑定状态。
    注意最好在关站状态下执行,切记提前备份。

    ---------------------------------------------------------------------------------------------------------


    PS:本例参考的具体说明如下:

    UPDATE `cdb_name` SET `field_name` = replace (`field_name`,'from_str','to_str')

    说明:
    cdb_name —— 该字符或字符串所在表的名字
    field_name —— 该字符或字符串所在字段的字段名
    from_str —— 需要替换的字符串
    to_str —— 替换成的字符串