Beispiel #1
0
def migu_register():
    """用户注册(GET|POST)

    :uri: /migu/register_phone
    :param phone: 手机号
    :param password: 密码
    :param code: 验证码
    :param sessionid: 短信sessionid
    :returns: {'user': object, 'ut': string}
    """
    params = request.values.to_dict()
    phone = params.get('phone', None)
    code = params.get('code', None)
    sessionid = params.get('sessionid', None)
    password = params.get('password', None)
    if not phone or not code or not password or not sessionid:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    # 用户中心注册
    ret = Migu.center_register(phone, password, const.CENTER_ACCOUNT_PHONE,
                               code, sessionid)
    if isinstance(ret, error.ApiError):
        return ret

    # 进行用户绑定
    migu_uid = Migu.get_identityid(phone, password, const.CENTER_ACCOUNT_PHONE)
    if isinstance(migu_uid, error.ApiError):
        return migu_uid

    user = User.get_platform_user('migu', migu_uid)
    if not user:
        user = User.get_by_phone(phone)
        if user:
            info = dict(partner_migu={'id': migu_uid},
                        nickname=u'咪咕用户%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)),
                        gender=random.randint(1, 2),
                        name='$mg$%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)))
            user = user.update_model({'$set': info})
        else:
            info = dict(phone=phone,
                        nickname=u'咪咕用户%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)),
                        gender=random.randint(1, 2),
                        name='$mg$%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)))
            user = User.create_platform_user('migu', migu_uid, data=info)
    else:
        # 如果用户没有绑定手机并且手机号没有被绑定, 则自动进行手机号绑定
        if not user.phone and not User.get_by_phone(phone):
            info = dict(phone=phone)
            user.update_model({'$set': info})

    ut = User.gen_token(str(user._id))
    return {'user': user.format(), 'ut': ut}
Beispiel #2
0
def migu_reset_password():
    """重置密码 (GET|POST)

    :uri: /migu/reset_password
    :param phone: 手机号
    :param password: 密码
    :param code: 短信验证码
    :param sessionid: 短信sessionid
    :returns: {}
    """
    params = request.values.to_dict()
    phone = params.get('phone', None)
    code = params.get('code', None)
    sessionid = params.get('sessionid', None)
    password = params.get("password", None)
    if not phone or not code or not password or not sessionid:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    ret = Migu.center_reset_pwd(phone, password, const.CENTER_ACCOUNT_PHONE,
                                code, sessionid)
    if isinstance(ret, error.ApiError):
        return ret

    return {}
Beispiel #3
0
def migu_change_pwd():
    """更改密码(GET|POST)

    :uri: /migu/change_password
    :param phone: 手机号
    :param old_pwd: 旧密码
    :param new_pwd: 新密码
    :returns: {}
    """
    user = request.authed_user
    params = request.values
    old_pwd = params.get('old_pwd', None)
    new_pwd = params.get('new_pwd', None)
    phone = params.get('phone', None) or (user and user.phone)

    if not old_pwd or not new_pwd or not phone:
        return error.InvalidArguments

    invalid_error = User.invalid_password(new_pwd)
    if invalid_error:
        return invalid_error

    openid = Migu.get_identityid(phone, old_pwd, const.CENTER_ACCOUNT_PHONE)
    if isinstance(openid, error.ApiError):
        return openid

    ret = Migu.center_update_pwd(openid, old_pwd, new_pwd)
    if isinstance(ret, error.ApiError):
        return ret

    return {}
Beispiel #4
0
def reset_password():
    """重置密码 (GET|POST)

    :uri: /users/reset_password
    :param phone: 手机号
    :param password: 密码
    :param code: 短信验证码
    :returns: {}
    """
    params = request.values
    phone = params.get('phone', None)
    code = params.get('code', None)
    password = params.get("password", None)
    if not phone or not code or not password:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    user = User.get_by_phone(phone)
    if not user:
        return error.UserNotExist

    if not SMS.verify_code(phone, code):
        return error.VerifyCodeFailed

    User.change_pwd(user, password)
    return {}
Beispiel #5
0
def register_phone():
    """用户手机注册 (GET|POST)

    :uri: /users/register_phone
    :param phone: 手机号
    :param password: 密码
    :param nickname: 昵称
    :param code: 短信验证码
    :param gender: 性别(可选)(1:男, 2:女)
    :returns: {'user': object, 'ut': string}
    """
    params = request.values
    phone = params.get('phone', None)
    code = params.get('code', None)
    password = params.get("password", None)
    nickname = params.get("nickname", None)
    gender = params.get("gender", 0)
    if not phone or not code or not password or not nickname:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    invalid_error = User.invalid_nickname(nickname)
    if invalid_error:
        return invalid_error

    if User.get_by_phone(phone):
        return error.UserExists

    if not SMS.verify_code(phone, code):
        return error.VerifyCodeFailed

    user = User.init()
    name = '$mb$%s%s' % (phone[-4:], random.randint(1000, 9999))
    user.name = name
    user.phone = phone
    user.nickname = nickname
    user.gender = gender

    salt = os.urandom(const.PWD_HASH_LEN)
    pwd = User.gen_pwd_hash(password, salt)
    user._salt = Binary(salt)
    user._password = Binary(pwd)
    uid = user.create_model()
    new_user = User.get_one(uid)
    token = User.gen_token(str(uid))
    return {'user': new_user.format(), 'ut': token}
Beispiel #6
0
def register():
    """用户注册 (GET|POST)

    :uri: /users/register
    :param name: 用户名
    :param password: 密码
    :param nickname: 昵称
    :returns: {'user': object, 'ut': string}
    """
    params = request.values.to_dict()
    name = params.get("name", None)
    # delete password from data so that we don't save it to mongo
    password = str(params.pop("password", None))
    nickname = params.get('nickname', None)
    if not name or not password or not nickname:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    invalid_error = User.invalid_nickname(nickname)
    if invalid_error:
        return invalid_error

    if User.get_by_name(name):
        return error.UserExists

    user = User.init()
    user.update(params)

    salt = os.urandom(const.PWD_HASH_LEN)
    pwd = User.gen_pwd_hash(password, salt)
    user._salt = Binary(salt)
    user._password = Binary(pwd)
    uid = user.create_model()
    new_user = User.get_one(uid)

    # 初始化用户任务
    UserTask.create_and_init_user_tasks(str(new_user._id))

    token = User.gen_token(str(uid))
    return {'user': new_user.format(), 'ut': token}
Beispiel #7
0
def change_pwd(uid):
    """修改密码 (GET|POST&LOGIN)

    :uri: /users/<string:uid>/change-password
    :param old_pwd: 旧密码
    :param new_pwd: 新密码
    :returns: {}
    """
    user = request.authed_user
    params = request.values
    old_pwd = params.get('old_pwd', None)
    new_pwd = params.get('new_pwd', None)
    user = User.login(user.name, old_pwd)
    if not user:
        return error.AuthFailed('原密码不正确')

    invalid_error = User.invalid_password(new_pwd)
    if invalid_error:
        return invalid_error

    User.change_pwd(user, new_pwd)
    return {}