def oauth2_signUp(self, openid, register_ip): """OAuth直接登录时注册入系统 @param openid str: 加密的openid,用以获取缓存中数据userinfo,格式是: userinfo dict: 用户信息,必须包含`openid`,`identity_type`,`avatar`,`nick_name` @param register_ip str: 注册IP地址 """ res = dict(msg=None, success=False) userinfo = self.__oauth2_getUserinfo(openid) logger.debug(userinfo) logger.debug(type(userinfo)) if userinfo and isinstance(userinfo, dict) and "avatar" in userinfo and "nick_name" in userinfo and "openid" in userinfo and "access_token" in userinfo and "identity_type" in userinfo: openid = userinfo["openid"] access_token = userinfo["access_token"] identity_type = int(userinfo["identity_type"]) avatar = userinfo["avatar"] nick_name = userinfo["nick_name"] gender = int(userinfo.get("gender") or 2) signature = userinfo.get("signature") or "" location = userinfo.get("location") or "" expire_time = userinfo.get("expire_time") or 0 guid = gen_uniqueId() logger.debug("check test: guid length: {}, identifier: {}, identity_type:{}, identity_type: {}, certificate: {}".format(len(guid), openid, identity_type, type(identity_type), access_token)) define_profile_sql = "INSERT INTO user_profile (uid, register_source, register_ip, nick_name, gender, signature, avatar, location, ctime, is_realname, is_admin) VALUES ('%s', %d, '%s', '%s', %d, '%s', '%s', '%s', %d, %d, %d)" % (guid, identity_type, register_ip, nick_name, gender, signature, avatar, location, get_current_timestamp(), 0, 0) upts = self.__signUp_transacion(guid=guid, identifier=openid, identity_type=identity_type, certificate=access_token, verified=1, register_ip=register_ip, expire_time=expire_time, define_profile_sql=define_profile_sql) res.update(upts) if res["success"]: self.__oauth2_delUserinfo(openid) res.update(identity_type=identity_type, uid=guid) else: res.update(msg="Check failed") logger.info(res) return res
def signUp(self, account, vcode, password, repassword, register_ip): """注册接口,面向前端 参数: @param account str: 注册的账号,邮箱/手机号 @param vcode str: 使用手机或邮箱的验证码 @param password str: 密码 @param repassword str: 重复密码 @param register_ip str: 注册IP地址 流程: 1. 判断账号类型,仅支持邮箱、手机号两种本地账号。 2. 校验密码、验证码是否合格、正确。 3. 密码、验证码通过后,当为邮箱时,校验邮箱是否存在;当为手机时,校验手机是否存在。 4. 生成guid,注册并响应事务结果。 """ res = dict(msg=None, success=False) # NO.1 检查账号类型 if email_check(account): # 账号类型:邮箱 # NO.2 检查密码、验证码 if password and repassword and password == repassword and 6 <= len( password) <= 30: certificate = generate_password_hash(password) if vcode and len(vcode) == 6 and self.__check_sendEmailVcode( account, vcode, scene="signUp"): # NO.3 检查账号是否存在 if self.__check_hasEmail(account): res.update(msg="Email already exists") else: guid = gen_uniqueId() upts = self.__signUp_transacion( guid=guid, identifier=account, identity_type=2, certificate=certificate, verified=1, register_ip=register_ip) res.update(upts) else: res.update(msg="Invalid verification code") else: res.update( msg= "Invalid password: Inconsistent password or length failed twice" ) elif phone_check(account): # 账号类型:手机 res.update(msg="Not support phone number registration") else: # 账号类型:非法,拒绝 res.update(msg="Invalid account") logger.info(res) return res
def __createSuperuser(email, password): ''' begin的方式使用事务注册账号, 参数: @param email str: 管理员邮箱 @param password str: 账号密码 流程: 1、写入`user_auth`表 2、写入`user_profile`表 返回字典: success bool 表示注册是否成功; msg str 表示提示信息。 ''' res = dict(success=False, msg=None) # 校验 if email_check(email) and 6 <= len(password) <= 30: guid = gen_uniqueId() ctime = get_current_timestamp() try: mysql._db.begin() try: mysql.insert( "INSERT INTO user_auth (uid, identity_type, identifier, certificate, verified, status, ctime) VALUES (%s, %s, %s, %s, %s, %s, %s)", guid, 2, email, generate_password_hash(password), 1, 1, ctime) except IntegrityError: res.update(msg="Account already exists") raise except Exception, e: res.update(msg="System is abnormal") raise else: try: mysql.insert( "INSERT INTO user_profile (uid, register_source, ctime, is_admin) VALUES (%s, %s, %s, %s)", guid, 2, ctime, 1) except: raise mysql._db.commit()