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 verify_nickname(): """验证昵称 (GET|POST) :uri: /users/verify_nickname :param nickname: 昵称 :returns: {} """ params = request.values nickname = params.get('nickname', None) invalid_error = User.invalid_nickname(nickname) if invalid_error: return invalid_error return {}
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 modify_info(uid): """修改用户信息 (GET|POST&LOGIN) :uri: /users/<string:uid>/modify-info :param nickname: 昵称 :param phone: 手机 :param birthday: 生日 :param email: 邮箱 :param gender: 性别(1:男, 2:女) :param signature: 签名 :param announcement: 公告 :returns: {'user': object} """ user = request.authed_user params = request.values nickname = params.get('nickname', None) signature = params.get('signature', None) if signature: if Spam.filter_words(signature, 'signature'): return error.InvalidContent announcement = params.get('announcement', None) if announcement: if Spam.filter_words(announcement, 'announcement'): return error.InvalidContent if nickname: invalid_error = User.invalid_nickname(nickname) if invalid_error: return invalid_error info = dict() for key in const.USER_ALLOWED_MODIFY: if params.get(key, None): info[key] = const.USER_ALLOWED_MODIFY[key](params[key]) if 'gender' in info and info['gender'] not in [1, 2]: return error.InvalidArguments info['update_at'] = time.time() user = user.update_model({'$set': info}) return {'user': user.format()}