zhangnaiwen il y a 2 ans
Parent
commit
956a0d3027
3 fichiers modifiés avec 36 ajouts et 15 suppressions
  1. 31 12
      src/app/api/login.py
  2. 2 2
      src/app/helpers/request_handlers.py
  3. 3 1
      src/app/modle/__init__.py

+ 31 - 12
src/app/api/login.py

@@ -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)

+ 2 - 2
src/app/helpers/request_handlers.py

@@ -15,6 +15,6 @@ def configure(app):
         if token:
             payload = verify_jwt(token)
             if payload is None:
-                return {"code": StatesCode.SUCCESS, "message": "无效的token"}
+                return {"code": StatesCode.UNKNOWN_ERROR, "message": "无效的token"}
         else:
-            return {"code": StatesCode.SUCCESS, "message": "无效的token"}
+            return {"code": StatesCode.UNKNOWN_ERROR, "message": "无效的token"}

+ 3 - 1
src/app/modle/__init__.py

@@ -1,3 +1,5 @@
 from sqlalchemy.orm import DeclarativeBase
+
+
 class Base(DeclarativeBase):
-    pass
+    pass