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}
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 {}
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 {}
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 {}
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}
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}
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 {}