|
|
from flask import Blueprint, request, jsonify
|
|
|
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
|
|
|
from app import redis_client, LogService
|
|
|
from app.models.passenger_lib import Passenger, isAvailable
|
|
|
from presenter import PassengerPresenter
|
|
|
from utils import StateCode, create_response, checkMobile, checkIdCard, checkBankCard
|
|
|
|
|
|
register_bp = Blueprint('register', __name__)
|
|
|
|
|
|
#注册模块
|
|
|
@register_bp.route('/register', methods=['POST'])
|
|
|
def register():
|
|
|
#获取到前端用户注册的数据
|
|
|
data = request.json
|
|
|
print(data)
|
|
|
account = data.get('account') #用户名
|
|
|
password = data.get('password') #密码
|
|
|
mobile_no = data.get('mobileNo') #手机号
|
|
|
mobile_code = data.get('mobileCode') #验证码
|
|
|
id_card_no = data.get('idCardNo') #身份证号
|
|
|
bank_card_no = data.get('bankCard') #银行卡号
|
|
|
|
|
|
#判断账号和密码是否为空
|
|
|
if not account or not password:
|
|
|
return jsonify(create_response(StateCode.PARAMS_ERROR)), 400
|
|
|
|
|
|
#判断手机号是否可行
|
|
|
if not checkMobile(mobile_no):
|
|
|
return jsonify(create_response(StateCode.MOBILE_ERROR)), 400
|
|
|
|
|
|
#判断验证码是否正确(俩个参数,手机号和验证码)
|
|
|
if not verifyCode(mobile_no, mobile_code):
|
|
|
return jsonify(create_response(StateCode.MOBILE_CODE_ERROR)), 400
|
|
|
|
|
|
#判断身份证号码是否可行
|
|
|
if not checkIdCard(id_card_no):
|
|
|
return jsonify(create_response(StateCode.ID_CARD_ERROR)), 400
|
|
|
|
|
|
# 判断账号是否被注册过
|
|
|
if isAvailable(account):
|
|
|
return jsonify(create_response(StateCode.USER_ALREADY_EXISTS)), 400
|
|
|
|
|
|
#判断银行卡号是否可行
|
|
|
if not checkBankCard(bank_card_no):
|
|
|
return jsonify(create_response(StateCode.BANK_CARD_ERROR)), 400
|
|
|
|
|
|
new_passenger = Passenger.create(data=data)
|
|
|
# 为新创建的乘客生成访问令牌
|
|
|
access_token = create_access_token(identity=new_passenger.id)
|
|
|
user_presenter = PassengerPresenter(new_passenger, {"token": access_token}).as_dict()
|
|
|
LogService.log()
|
|
|
return jsonify(create_response(StateCode.SUCCESS, data=user_presenter)), 200
|
|
|
|
|
|
|
|
|
@register_bp.route('/auth', methods=['GET'])
|
|
|
@jwt_required()
|
|
|
def auth():
|
|
|
current_user = get_jwt_identity()
|
|
|
user = Passenger.query.get(current_user)
|
|
|
if not user:
|
|
|
return jsonify(create_response(StateCode.USER_NOT_FOUND)), 400
|
|
|
user_presenter = PassengerPresenter(user, {}).as_dict()
|
|
|
LogService.log()
|
|
|
|
|
|
return jsonify(create_response(code=StateCode.SUCCESS, data=user_presenter)), 200
|
|
|
|
|
|
#校验验证码
|
|
|
def verifyCode(mobile_no, code):
|
|
|
#获取到随机产生的验证码,再判断用户输入的验证码是否正确
|
|
|
#这里的用到了redis,Redis是一种开源的、基于内存的键值存储,通常用于缓存、分布式存储 和 高效数据处理,
|
|
|
#所以通过get方法获取到对应的值即验证码
|
|
|
stored_code = redis_client.get(mobile_no)
|
|
|
return stored_code == code
|