def get(self): """获取验证码""" cookies = self.get_secure_cookie("captcha_id") if cookies: captcha = Captcha(json.loads(cookies)) # 创建生成验证码对象 else: captcha = Captcha() dict_data = yield captcha.get_captcha() # 获取验证码返回值 # 设置cookie 验证码校验值 self.set_secure_cookie("captcha_id",json.dumps(dict_data["cookies"],ensure_ascii=False).encode("utf-8")) self.write({"errcode":"0","errmsg":"验证码获取成功","data":dict_data["data"]}) # 返回图片数据
def GetCaptcha(): text, image = Captcha().gen_graph_captcha() out = BytesIO() image.save(out, 'png') out.seek(0) resp = make_response(out.read()) resp.content_type = 'image/png' # 存入session session['Captcha'] = text return resp
def post(self): """校验登录""" try: # 获取用户传递参数 user_number = self.json_args["mobile"] # 账号 user_pwd = self.json_args["password"] # 密码 captcha_text = self.json_args["imagecode"] # 验证码文本 captcha_id = self.get_secure_cookie("captcha_id")# 获取cookie中远程cookie值 except Exception as e: # 出现异常或参数错误返回 raise tornado.gen.Return(self.write({"errcode": "4103", "errmsg": "参数错误"})) if not captcha_id: raise tornado.gen.Return(self.write({"errcode": "4103", "errmsg": "参数错误"})) captcha = Captcha(json.loads(captcha_id)) # 创建验证码对象 dict_data = yield captcha.check_captcha(captcha_text)# 发送请求检验验证码值 if dict_data["errcode"] != "0": # 验证码过期 raise tornado.gen.Return(self.write({"errcode": "4103", "errmsg": "验证码错误"})) check_login = CheckLogin(dict_data["cookies"]) # 发送请求验证账号密码 resp = yield check_login.get_uamtk(user_number,user_pwd) if resp["errcode"] != "0": # 账号密码错误 raise tornado.gen.Return(self.write({"errcode": "4106", "errmsg": "用户名或密码错误"})) resp = yield check_login.get_session() # 发送请求更换session if not resp: raise tornado.gen.Return(self.write({"errcode": "4106", "errmsg": "用户名或密码错误1"})) resp = yield check_login.get_user_name() # 发送请求获取用户名 if resp["errcode"] != "0": # 获取失败 raise tornado.gen.Return(self.write({"errcode": "4106", "errmsg": "用户名或者密码错误2"})) user = self.db.get("select id from user_info where ui_account=%s",user_number) if user == None: # 如果无数据则插入 user_id = self.db.execute("insert into user_info(ui_name,ui_account,ui_pwd) values(%s,%s,%s)",resp["username"],user_number,user_pwd) else: # 否则更新数据 self.db.execute("update user_info set ui_pwd=%s,ui_login=ui_login+1 where ui_account=%s",user_pwd,user_number) user_id = user["id"] session = Session(self) # 创建session对象 session.data["user_name"] = resp["username"] session.data["user_account"] = user_number session.data["user_id"] = user_id session.data["cookies"] = resp["cookies"] session.save() # 写入数据并设置cookie self.clear_cookie("captcha-id") # 删除验证码验证数据 返回登录成功 raise tornado.gen.Return(self.write({"errcode": "0", "errmsg": "登录成功"}))
def validate_captcha_text(captcha, delete=True): secret = session.get('cap_secret') if not secret: raise CaptchaSecretNotFoundError() Captcha.validate(captcha, secret, delete)