zoukankan      html  css  js  c++  java
  • 整合游戏账号登陆论坛

    需求:
        游戏账号可以登录discuz论坛。

    思路:
        时间短,没有做API接口。直接使用数据库同步的方法。
        1,用户登录游戏的时候,判断是否该账户在discuz_ucenter中,有则pass,没有则在uc_members中插入一条用户记录。
        2,用户在修改游戏账号密码的时候,同时修改discuz_ucenter中对应该账户的密码。
        3,用户在注册游戏账号的时候,同时写入discuz_ucenter中用户记录。

    实现:
        一,修改settings.py中的数据库配置,增加一个discuz论坛所在的数据库,键名称为"ucenter"。
        例如:
        DATABASES = {
            'default': {
                'ENGINE': 'mysql',
                'NAME': 'ppy',
                'USER': 'root',
                'PASSWORD': '123',
                'HOST': '',
            },
            'second': {
                'ENGINE': 'mysql',
                'NAME': 'ppy',
                'USER': 'root',
                'PASSWORD': '123',
                'HOST': ''
            },
            'ucenter': {
                'ENGINE': 'mysql',
                'NAME': 'discuz',
                'USER': 'root',
                'PASSWORD': '1232',
                'HOST': ''
            }
        }
        
        二、程序代码改动
        #工具代码
        def get_client_ip(request):
        try:
            real_ip = request.META['HTTP_X_FORWARDED_FOR']
            regip = real_ip.split(",")[0]
        except:
            regip = request.META.get['REMOTE_ADDR', '']
        return regip

        def get_salt():
            samples = string.letters + string.digits
            salt = "".join(random.sample(samples, 6))
            return salt
        #其他代码
        略
        
        三、discuz可能需要的改动
        1,禁止用户注册,后台管理设置即可。
        2,修改密码错误次数,方便测试。
            打开 include 目录下的 misc.func.php,找到
            $return = (!$login ($timestamp – $login['lastupdate'] 900)) 4 max(0, 5 – $login['count']);
            这句
            
            $login['lastupdate'] 900))
            这个是时间限制,900秒,就是15分钟,你可以改成60就是1分钟,输入错误了1分钟后可以登陆。
            
            max(0, 5 – $login['count']);
            这里的5就是错误次数,如果想让他永远不提示,就改999999999999
        3,禁止用户修改密码
            修改discuz根目录文件memcp.php
            149行左右,修改为以下
            #$ucresult = uc_user_edit($discuz_user, $oldpassword, $newpassword, $emailnew, 0, $questionidnew, $answernew);
            $ucresult = -7;
            if($ucresult == -1) {
                showmessage('profile_passwd_wrong', NULL, 'HALTED');
            } elseif($ucresult == -4) {
                showmessage('profile_email_illegal');
            } elseif($ucresult == -5) {
                showmessage('profile_email_domain_illegal');
            } elseif($ucresult == -6) {
                showmessage('profile_email_duplicate');
            } elseif($ucresult == -7){
                showmessage('you can not change your password on this site.');
            }

    问题总结:
        一、技术点
        Discuz SNS及BBS的密码采用非明文方式,加密算法如下(采用mysql函数方式描述): 
            md5(concat(md5(‘password’),salt))
        
        二、系统问题
        连接远程机器时候,有可能遭遇防火墙问题。
        
        三、数据库问题
        uc_members和cdb_members表结构中,username为char(15),如果用户名过长会有问题,
        可以修改username 为varchar(50)或者其他更合适的结构。
  • 相关阅读:
    (1)spark核心RDD的概念解析、创建、以及相关操作
    docker常用命令
    asyncpg:异步操作PostgreSQL
    python调用golang编写的动态链接库
    使用C语言为python编写动态模块(3)--在C中实现python中的类
    使用C语言为python编写动态模块(2)--解析python中的对象如何在C语言中传递并返回
    flask的orm操作
    python下载指定的版本包
    flask 的管理模块的功能add_template_global、send_from_directory
    docker 的简单使用
  • 原文地址:https://www.cnblogs.com/imouren/p/2015852.html
Copyright © 2011-2022 走看看