aaron-1015 преди 3 години
родител
ревизия
197646e203
променени са 6 файла, в които са добавени 59 реда и са изтрити 113 реда
  1. BIN
      __pycache__/main.cpython-39.pyc
  2. BIN
      __pycache__/models.cpython-39.pyc
  3. 17 10
      main.py
  4. 16 0
      models.py
  5. 26 26
      static/index.js
  6. 0 77
      test.ipynb

BIN
__pycache__/main.cpython-39.pyc


BIN
__pycache__/models.cpython-39.pyc


+ 17 - 10
main.py

@@ -57,6 +57,12 @@ app.mount(path='/static', app=StaticFiles(directory='static'), name='static ')
 # 
 templates = Jinja2Templates(directory='templates')
 
+
+@AuthJWT.load_config
+def get_config():
+    return models.Settings()
+
+
 # view
 @app.get('/', response_class=HTMLResponse)
 async def index(request: Request):
@@ -67,7 +73,7 @@ async def index(request: Request):
 async def login(request: Request):
     return templates.TemplateResponse(name='login.html', context={'request': request})
 
-@app.post("/login")
+@app.post("/login", response_class=HTMLResponse)
 async def login_for_access_token(request: Request, form_data: OAuth2PasswordRequestForm = Depends(), Authorize: AuthJWT = Depends()):
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/aaron_testdb?charset=utf8mb4')
     user = authenticate_user(form_data.username, form_data.password)
@@ -83,13 +89,14 @@ async def login_for_access_token(request: Request, form_data: OAuth2PasswordRequ
     )
     table = db['users']
     user.token = access_token
+    print(user)
     table.update(dict(user), ['username'])
     access_token = Authorize.create_access_token(subject=user.username)
     refresh_token = Authorize.create_refresh_token(subject=user.username)
     Authorize.set_access_cookies(access_token)
     Authorize.set_refresh_cookies(refresh_token)
-    #return templates.TemplateResponse("index.html", {"request": request, "msg": 'Login'})
-    return {"access_token": access_token, "token_type": "bearer"}
+    return templates.TemplateResponse("home.html", {"request": request, "msg": 'Login'})
+    # return {"access_token": access_token, "token_type": "bearer"}
 
     
 @app.get('/register', response_class=HTMLResponse)
@@ -113,31 +120,31 @@ async def register(request: Request, form_data: OAuth2PasswordRequestForm = Depe
     return templates.TemplateResponse(name='login.html', context={'request': request})
 
 @app.get('/home', response_class=HTMLResponse)
-async def login(request: Request):
+async def home(request: Request):
     return templates.TemplateResponse(name='home.html', context={'request': request})
 
 @app.get('/tower', response_class=HTMLResponse)
-async def login(request: Request):
+async def tower(request: Request):
     return templates.TemplateResponse(name='tower.html', context={'request': request})
 
 @app.get('/optim', response_class=HTMLResponse)
-async def login(request: Request):
+async def optim(request: Request):
     return templates.TemplateResponse(name='optim.html', context={'request': request})
 
 @app.get('/vibration', response_class=HTMLResponse)
-async def login(request: Request):
+async def vibration(request: Request):
     return templates.TemplateResponse(name='vibration.html', context={'request': request})
 
 @app.get('/history', response_class=HTMLResponse)
-async def login(request: Request):
+async def history(request: Request):
     return templates.TemplateResponse(name='history.html', context={'request': request})
 
 @app.get('/device', response_class=HTMLResponse)
-async def login(request: Request):
+async def device(request: Request):
     return templates.TemplateResponse(name='device.html', context={'request': request})
 
 @app.get('/system', response_class=HTMLResponse)
-async def login(request: Request):
+async def system(request: Request):
     return templates.TemplateResponse(name='system.html', context={'request': request})
 
 

+ 16 - 0
models.py

@@ -2,6 +2,14 @@ from pydantic import BaseModel
 from typing import Optional
 import datetime
 
+SECRET_KEY = "df2f77bd544240801a048bd4293afd8eeb7fff3cb7050e42c791db4b83ebadcd"
+ALGORITHM = "HS256"
+
+
+class Token(BaseModel):
+    access_token: str
+    token_type: str
+
 
 class User(BaseModel):
     username: str
@@ -11,3 +19,11 @@ class User(BaseModel):
     isEnable: Optional[bool] = True
     updateTime: Optional[datetime.datetime] = None
     token: Optional[str] = None
+
+
+# AuthJWT setting
+class Settings(BaseModel):
+    authjwt_secret_key: str = SECRET_KEY
+    authjwt_token_location: set = {"cookies"}
+    authjwt_cookie_secure: bool = False
+    authjwt_cookie_csrf_protect: bool = True

+ 26 - 26
static/index.js

@@ -1,30 +1,30 @@
 
-// $("#btn_login").click(function () {
-//     var url = "login";
-//     var xhr = new XMLHttpRequest();
-//     xhr.open("POST", url);
-//     console.log('url:');
-//     console.log(url);
-//     xhr.setRequestHeader("accept", "application/json");
-//     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-//     xhr.onreadystatechange = function () {
-//       if (xhr.readyState === 4) {
-//         console.log(xhr.status);
-//         responseOBJ = JSON.parse(xhr.responseText)
-//         console.log(responseOBJ.access_token);
-//         // document.cookie = 'jwt_token='+responseOBJ.jwt_token    // access_token -> jwt_token
-//         document.cookie = 'jwt_token='+responseOBJ.access_token;
-//         console.log('cookie: ');
-//         console.log(document.cookie);     // test log
-//         alert('登入成功')
-//         window.location.replace("/index")
-//       }
-//     };
-//     var data = "grant_type=&username=" + $('#username').val() + "&password="+$('#password').val()+"&scope=&client_id=&client_secret=";
-//     console.log("data:");
-//     console.log(data);    // test 
-//     xhr.send(data);
-//   });
+$("#btn_login").click(function () {
+    var url = "login";
+    var xhr = new XMLHttpRequest();
+    xhr.open("POST", url);
+    console.log('url:');
+    console.log(url);
+    xhr.setRequestHeader("accept", "application/json");
+    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+    xhr.onreadystatechange = function () {
+      if (xhr.readyState === 4) {
+        console.log(xhr.status);
+        responseOBJ = JSON.parse(xhr.responseText)
+        console.log(responseOBJ.access_token);
+        // document.cookie = 'jwt_token='+responseOBJ.jwt_token    // access_token -> jwt_token
+        document.cookie = 'jwt_token='+responseOBJ.access_token;
+        console.log('cookie: ');
+        console.log(document.cookie);     // test log
+        console.log('登入成功');
+        window.location.replace("/home")
+      }
+    };
+    var data = "grant_type=&username=" + $('#username').val() + "&password="+$('#password').val()+"&scope=&client_id=&client_secret=";
+    console.log("data:");
+    console.log(data);    // test 
+    xhr.send(data);
+  });
   
   
   

+ 0 - 77
test.ipynb

@@ -1,77 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-08-03T04:52:27.320427Z",
-     "start_time": "2021-08-03T04:52:27.285576Z"
-    }
-   },
-   "outputs": [
-    {
-     "ename": "ModuleNotFoundError",
-     "evalue": "No module named '__main__.mechancial'; '__main__' is not a package",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-5-52ec032c6dad>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     22\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mdataset\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     23\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mpasslib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mcontext\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 24\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mmechancial\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmodels\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     25\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     26\u001b[0m \u001b[1;31m# authorize\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named '__main__.mechancial'; '__main__' is not a package"
-     ]
-    }
-   ],
-   "source": [
-    "# fastapi\n",
-    "from fastapi import FastAPI, Request, Response, HTTPException, status, Depends\n",
-    "from fastapi import templating\n",
-    "from fastapi.templating import Jinja2Templates\n",
-    "from fastapi.responses import HTMLResponse, RedirectResponse, JSONResponse\n",
-    "from fastapi.middleware.cors import CORSMiddleware\n",
-    "\n",
-    "# static file\n",
-    "from fastapi.staticfiles import StaticFiles\n",
-    "\n",
-    "# fastapi view function parameters\n",
-    "from typing import List, Optional\n",
-    "\n",
-    "# path\n",
-    "import os\n",
-    "\n",
-    "# time\n",
-    "import datetime\n",
-    "from datetime import timedelta\n",
-    "\n",
-    "# db\n",
-    "import dataset\n",
-    "from passlib import context\n",
-    "from .mechancial import models\n",
-    "\n",
-    "# authorize\n",
-    "from passlib.context import CryptContext\n",
-    "pwd_context = CryptContext(schemes=[\"bcrypt\"], deprecated=\"auto\")\n",
-    "from jose import JWTError, jwt\n",
-    "from fastapi_jwt_auth import AuthJWT\n",
-    "from fastapi_jwt_auth.exceptions import AuthJWTException\n",
-    "from fastapi.security import OAuth2AuthorizationCodeBearer, OAuth2PasswordRequestForm"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3.7.3 64-bit",
-   "language": "python",
-   "name": "python37364bit6893c7013b164b1189a865dcaea9fb2f"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}