Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
 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()