用户登录,登出总结

@api.route("/sessions", methods=["POST"])
def login():
	"""
	用户登录
	参数:用户手机号、密码 json
	:return:
	"""
	# 获取参数
	req_dict = request.get_json()
	mobile = req_dict.get("mobile")
	password = req_dict.get("password")
	# 校验参数
	# 参数是否完整
	if not all([mobile, password]):
    	return jsonify(errno=RET.PARAMERR, errmsg="参数不完整")

	# 判断手机号格式
	if not re.match(r"1[34578]\d{9}", mobile):
    	return jsonify(errno=RET.PARAMERR, errmsg="手机号码格式错误")
	# 判断错误次数是否超过限制,如果超过限制,则返回
	# redis记录:"access_num_请求的ip":"次数"
	user_ip = request.remote_addr # 用户的ip地址
	try:
    	access_nums = redis_store.get("access_num_%s" % user_ip)
	except Exception as e:
    	current_app.logger.error(e)
	else:
    	if access_nums is not None and int(access_nums) >= LOGIN_ERROR_MAX_TIMES:
        	return jsonify(errno=RET.REQERR, errmsg="错误次数过多,请稍后重试")

	# 从数据库中根据手机号查询用户的数据对象
	try:
    	user = User.query.filter_by(mobile=mobile).first()
	except Exception as e:
    	return jsonify(errno=RET.DBERR, errmsg="获取用户信息失败")

	# 用数据库的密码与用户填写的密码进行匹配验证
	if user is None or user.check_password(password) is False:
    	# 如果验证失败,记录错误次数,返回信息
    	try:
        	redis_store.incr("access_num_%s" % user_ip)
        	redis_store.expire("access_num_%s" % user_ip, LOGIN_ERROR_FORBID_TIME)
    	except Exception as e:
        	current_app.logger.error(e)

    	return jsonify(errno=RET.DATAERR, errmsg="用户名或密码错误")

	# 如果验证相同成功,保存登录状态。
	session["name"] = user.name
	session['mobile'] = user.mobile
	session["user_id"] = user.id

	return jsonify(errno=RET.OK, errmsg="登陆成功")


@api.route("/session", methods=["GET"])
def check_login():
	"""检查登录状态"""
	name = session.get("name")
	if name is not None:
    	return jsonify(errno=RET.OK, errmsg="true", data={"name":name})
	else:
    	return jsonify(errno=RET.SESSIONERR,errmsg="false")


@api.route("/session", methods=["DELETE"])	
def logout():
	"""退出登录"""
	session.clear()
	return jsonify(errno=RET.OK, errmsg="ok")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值