Example #1
0
def auth_function_1001(request):
    """
    注册或登录
    :param request:
    :return:
    """
    req = LoginReq()
    req.ParseFromString(request['body'])
    rsp = LoginRsp()

    logger.debug('req:%s', req)

    if not req.uuid:
        rsp.ret = error_contrast.ERROR_INVALID_PARAMS
        return rsp.SerializeToString()

    if not req.sign:
        rsp.ret = error_contrast.ERROR_INVALID_PARAMS
        return rsp.SerializeToString()

    src = "%s&%s&%s" % (config.ONLY_PAY_SECRET, req.uuid, req.version)

    if req.sign != hashlib.md5(src).hexdigest():
        logger.error('invalid sign! req: %s', req)
        rsp.ret = error_contrast.ERROR_INVALID_PARAMS
        return rsp.SerializeToString()

    if is_app_crime(req.channel, req.version):
        if not req.extra_username or not req.extra_password:
            # 请输入用户名和密码
            rsp.ret = error_contrast.ERROR_ENTER_USERNAME_AND_PASSWORD
            return rsp.SerializeToString()

        db_user = User.objects.filter(
            extra_username=req.extra_username).first()
        if req.is_register and db_user:
            # 用户名已注册
            rsp.ret = error_contrast.ERROR_USERNAME_HAS_EXIST
            return rsp.SerializeToString()

        if not req.is_register:
            if not db_user:
                # 用户名不存在
                rsp.ret = error_contrast.ERROR_USERNAME_NOT_EXIST
                return rsp.SerializeToString()

            if db_user and db_user.extra_password != req.extra_password:
                # 密码错误
                rsp.ret = error_contrast.ERROR_PASSWORD_IS_ERROR
                return rsp.SerializeToString()
    else:
        db_user = User.objects.filter(uuid=req.uuid).first()

    if not db_user:
        db_user = User()
        db_user.password = get_password()
        if is_app_crime(req.channel, req.version):
            db_user.uuid = req.uuid + req.extra_username
            db_user.nick = req.extra_username
            db_user.extra_username = req.extra_username
            db_user.extra_password = req.extra_password
        else:
            db_user.uuid = req.uuid
            db_user.nick = req.nick[:6]
            db_user.card = 100

        if req.os:
            db_user.os = req.os

        db_user.save()

    # 转成Redis对象
    user = RedisUserMgr().get_user(db_user.uin)
    user.attach_db_user(db_user)
    user.update(dict(
        channel=req.channel,
        version=req.version,
        os=req.os,
    ))

    tell_transfer_to_bind(user.uin, request['connid'])

    return common_user_reg_or_login(request, user)