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 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 {}
def platform_login(): """第三方平台token登录 (GET|POST) :uri: /platform/users/login :param platform: 平台标识{'csdk':付费SDK, 'weixin':微信, 'qq':QQ, 'migu':咪咕} :param token: 用户平台token :returns: {'user': object, 'ut': string} """ params = request.values platform = params.get('platform', None) token = params.get("token", None) if not token or platform not in const.PARTNER: return error.InvalidArguments data = Migu.token_validate(token) if isinstance(data, error.ApiError): return data openid = data.get('msisdn', None) migu_uid = data.get('identityID', None) passid = data.get('passID', None) if isinstance(migu_uid, error.ApiError): return migu_uid if platform == 'migu': # 进行用户绑定 user = User.get_platform_user('migu', migu_uid) if not user: user = User.get_by_phone(openid) if user: info = dict(partner_migu={ 'id': migu_uid, 'passid': passid }, name='$mg$%s%s' % (migu_uid[-4:], random.randint(1000, 9999))) user = user.update_model({'$set': info}) else: info = dict(phone=openid, nickname=u'咪咕用户%s%s' % (migu_uid[-4:], random.randint(1000, 9999)), name='$mg$%s%s' % (migu_uid[-4:], random.randint(1000, 9999)), partner_migu={ 'id': migu_uid, 'passid': passid }) user = User.create_platform_user('migu', migu_uid, data=info) else: info = {} # 如果用户没有绑定手机并且手机号没有被绑定, 则自动进行手机号绑定 if not user.phone and not User.get_by_phone(openid): info = dict(phone=openid) # 如果用户未绑定passid,则自动进行passid绑定 if passid not in user.partner_migu: info.update( dict(partner_migu={ 'id': migu_uid, 'passid': passid })) if info: user = user.update_model({'$set': info}) # 同步咪咕用户名密码 if user: User.change_pwd(user, token) else: # 判断平台用户是否已经用户系统中存在 user = User.get_platform_user(platform, openid) first_login = not user info = {} if platform == 'csdk': info = ChargeSDK(token).get_open_info() elif platform == 'weixin': info = WeiXin(token, openid).get_open_info(first_login) elif platform == 'qq': info = QQ(token, openid).get_open_info(first_login) if not info: return error.LoginFailed # 如果平台用户在用户系统中不存在, 则创建, 通过平台ID(openid)进行关联 if first_login: open_id = info.pop('openid') user = User.create_platform_user(platform, open_id, data=info) # 给咪咕平台发送请求进行咪咕账号注册并登录绑定 try: if platform in ['qq', 'weixin'] and user: password = '******' % (openid[-4:]) ret = Migu.center_register(open_id, password, const.CENTER_ACCOUNT_INDIV) if not isinstance(ret, error.ApiError): openid = Migu.get_identityid( open_id, password, const.CENTER_ACCOUNT_INDIV) if not isinstance(openid, error.ApiError): if not User.get_platform_user('migu', openid): info = {'partner_migu': {'id': openid}} user.update_model({'$set': info}) except: pass if not user: return error.LoginFailed ut = User.gen_token(str(user._id)) return {'user': user.format(include_fields=['passid']), 'ut': ut}