|
@@ -1,27 +1,46 @@
|
|
|
from flask import request, jsonify
|
|
|
+from sqlalchemy import select
|
|
|
+from werkzeug.security import check_password_hash
|
|
|
from flask_restx import Resource, Namespace, reqparse
|
|
|
-from flask_jwt import JWT
|
|
|
-from app.defines import StatesCode
|
|
|
+from sqlalchemy.orm import Session
|
|
|
|
|
|
-from app.services.redis_service import save_oauth_token_uid
|
|
|
+from app.configs.config import engine
|
|
|
+from app.modle.users import User
|
|
|
+from app.utils.jwt_util import generate_jwt
|
|
|
+from app.defines import StatesCode
|
|
|
|
|
|
ns = Namespace('login', description='登入')
|
|
|
|
|
|
+login = reqparse.RequestParser(bundle_errors=True)
|
|
|
+login.add_argument(name='username', type=str, required=True, location='form', help='用户名')
|
|
|
+login.add_argument(name='password', type=str, required=True, location='form', help='密码')
|
|
|
+
|
|
|
|
|
|
@ns.route('')
|
|
|
class LoginApi(Resource):
|
|
|
@ns.doc(id='login', description='登入')
|
|
|
- @ns.expect()
|
|
|
+ @ns.expect(login)
|
|
|
def post(self):
|
|
|
"""登入"""
|
|
|
username = request.form.get('username')
|
|
|
password = request.form.get('password')
|
|
|
+
|
|
|
+ with Session(engine) as session:
|
|
|
+ stmt = select(User).where(User.user_name == username)
|
|
|
+ result = session.execute(stmt).scalars().first()
|
|
|
+ # statement = session.query(User).filter_by(user_name=username).first()
|
|
|
+
|
|
|
+ if result is None:
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message='用户不存在')
|
|
|
+
|
|
|
+ # 是否为禁用状态
|
|
|
+ if result.account_status:
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message='用户已禁用')
|
|
|
+
|
|
|
# 验证用户密码
|
|
|
- if obj is None:
|
|
|
- return jsonify(code=-1, message='登入失败', data='用户不存在')
|
|
|
- if obj.verify_password(password):
|
|
|
- token = generate_token(username)
|
|
|
- save_oauth_token_uid(token, obj.id)
|
|
|
- return jsonify(code=StatesCode.SUCCESS, message="登录成功", date=token)
|
|
|
- else:
|
|
|
- return jsonify(code=StatesCode.UNKNOWN_ERROR, message="登入失败", data='密码错误')
|
|
|
+ if not result.check_password(password):
|
|
|
+ return jsonify(code=StatesCode.UNKNOWN_ERROR, message="密码错误")
|
|
|
+
|
|
|
+ # 生成token
|
|
|
+ token = generate_jwt(result.id)
|
|
|
+ return jsonify(code=StatesCode.SUCCESS, message="登录成功", date=token)
|