Ver código fonte

登入接口
token验证

zhangnaiwen 2 anos atrás
pai
commit
427d50c43c

+ 2 - 2
src/app/__init__.py

@@ -2,7 +2,7 @@ from flask import Flask
 from flask_cors import CORS
 from flask_cors import CORS
 
 
 from app.api import api
 from app.api import api
-# from app.helpers import request_handlers
+from app.helpers import request_handlers
 
 
 
 
 def create_app():
 def create_app():
@@ -11,7 +11,7 @@ def create_app():
 
 
     CORS(app)
     CORS(app)
 
 
-    # request_handlers.configure(app)
+    request_handlers.configure(app)
 
 
     api.init_app(app)
     api.init_app(app)
 
 

+ 2 - 0
src/app/api/__init__.py

@@ -1,5 +1,6 @@
 from flask_restx import Api
 from flask_restx import Api
 
 
+from app.api.login import ns as login
 from app.api.users import ns as users
 from app.api.users import ns as users
 from app.api.organization import ns as organization
 from app.api.organization import ns as organization
 from app.api.role import ns as role
 from app.api.role import ns as role
@@ -8,3 +9,4 @@ api = Api(version='v1.0', title='operation_management_center', description='', d
 api.add_namespace(users)
 api.add_namespace(users)
 api.add_namespace(organization)
 api.add_namespace(organization)
 api.add_namespace(role)
 api.add_namespace(role)
+api.add_namespace(login)

+ 27 - 0
src/app/api/login.py

@@ -0,0 +1,27 @@
+from flask import request, jsonify
+from flask_restx import Resource, Namespace, reqparse
+from flask_jwt import JWT
+from app.defines import StatesCode
+
+from app.services.redis_service import save_oauth_token_uid
+
+ns = Namespace('login', description='登入')
+
+
+@ns.route('')
+class LoginApi(Resource):
+    @ns.doc(id='login', description='登入')
+    @ns.expect()
+    def post(self):
+        """登入"""
+        username = request.form.get('username')
+        password = request.form.get('password')
+        # 验证用户密码
+        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='密码错误')

+ 2 - 3
src/app/api/organization.py

@@ -1,4 +1,4 @@
-from flask import request
+from flask import request, jsonify
 from flask_restx import Resource, Namespace, reqparse
 from flask_restx import Resource, Namespace, reqparse
 
 
 from app.defines import StatesCode
 from app.defines import StatesCode
@@ -19,8 +19,7 @@ class OrganizationListApi(Resource):
             {"name": "北京电信设计院有限公司", "code": 9417, "corporate": "李四", "contacts": "李四",
             {"name": "北京电信设计院有限公司", "code": 9417, "corporate": "李四", "contacts": "李四",
              "mobile": "13912345670"}
              "mobile": "13912345670"}
         ]
         ]
-        return {"code": StatesCode.SUCCESS, "message": "成功", "data": data}
-
+        return jsonify(code=StatesCode.SUCCESS, message='成功', data=data)
 
 
 @ns.route('/organization')
 @ns.route('/organization')
 class OrganizationApi(Resource):
 class OrganizationApi(Resource):

+ 19 - 0
src/app/helpers/request_handlers.py

@@ -0,0 +1,19 @@
+from flask import request, abort
+
+from app.services.redis_service import get_uid_from_token
+
+
+def configure(app):
+    @app.before_request
+    def authenticate():
+        """
+        这里验证token
+        :return:
+        """
+        token = request.headers.get('token')
+        if token:
+            if get_uid_from_token(token):
+                abort(200)
+
+        else:
+            abort(403)

+ 0 - 0
src/app/services/__init__.py


+ 28 - 0
src/app/services/redis_service.py

@@ -0,0 +1,28 @@
+import redis
+
+from configs.globals import REDIS_HOST, REDIS_PORT, REDIS_DB, REDIS_PWD, MOBILE_VERIFICATION_CODE_EXPIRED
+
+# Redis使用连接池
+redis_pool = redis.ConnectionPool(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB)
+r = redis.Redis(connection_pool=redis_pool)
+
+# Redis的键,方便统一管理
+# rk前缀表示redis_key
+rk_oauth_get_uid_from_token = 'access_token:{token}'
+
+
+def save_oauth_token_uid(access_token, user_id, expired=3600):
+    # if not expired:
+    # expired = int(current_app.config.get('OAUTH2_PROVIDER_TOKEN_EXPIRES_IN', 3600))
+    k = rk_oauth_get_uid_from_token.format(token=access_token)
+    r.set(k, user_id, ex=expired)
+
+
+def del_oauth_token_uid(access_token):
+    k = rk_oauth_get_uid_from_token.format(token=access_token)
+    r.delete(k)
+
+
+def get_uid_from_token(access_token):
+    k = rk_oauth_get_uid_from_token.format(token=access_token)
+    return int(r.get(k))