Browse Source

輔導團DB欄位調整

Mia Cheng 2 years ago
parent
commit
404d4f9f51
2 changed files with 35 additions and 8 deletions
  1. 21 8
      app/api/users.py
  2. 14 0
      app/models/models.py

+ 21 - 8
app/api/users.py

@@ -1,6 +1,6 @@
 from fastapi import APIRouter, Form, Depends, HTTPException, Body
 from fastapi import APIRouter, Form, Depends, HTTPException, Body
 from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer
 from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer
-from app.models.models import User
+from app.models.models import User, UserPydantic
 from app.api import deps
 from app.api import deps
 from sqlalchemy.orm import Session
 from sqlalchemy.orm import Session
 from typing import Any, Dict, Optional
 from typing import Any, Dict, Optional
@@ -15,6 +15,8 @@ import emails
 from emails.template import JinjaTemplate
 from emails.template import JinjaTemplate
 import logging
 import logging
 import bcrypt
 import bcrypt
+
+from app.crud import crud_users
 import smtplib
 import smtplib
 from email.mime.text import MIMEText
 from email.mime.text import MIMEText
 from google.oauth2 import id_token
 from google.oauth2 import id_token
@@ -38,6 +40,7 @@ async def query_user(user_id: str):
     :return: None or the user object
     :return: None or the user object
     """
     """
     result = await User.filter(email=user_id,is_gmail=0).first()
     result = await User.filter(email=user_id,is_gmail=0).first()
+
     if not result:
     if not result:
         print('無此筆資料')
         print('無此筆資料')
         return None
         return None
@@ -60,15 +63,18 @@ async def query_user_username(user_id: str):
 
 
 
 
 @users.post("/login")
 @users.post("/login")
-async def login(data: OAuth2PasswordRequestForm = Depends()):
+async def login(data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(deps.get_db)):
+
     email = data.username
     email = data.username
     password = data.password
     password = data.password
 
 
     user = await query_user(email)
     user = await query_user(email)
-    print(user)
+    user_pydantic = UserPydantic.from_orm(user)
+    user_dict = user_pydantic.dict(exclude_unset=True)
     access_token = manager.create_access_token(
     access_token = manager.create_access_token(
         data={'sub': email}
         data={'sub': email}
     )
     )
+
     if not user:
     if not user:
         # you can return any response or error of your choice
         # you can return any response or error of your choice
         return {"message":"查無此人"}
         return {"message":"查無此人"}
@@ -76,6 +82,9 @@ async def login(data: OAuth2PasswordRequestForm = Depends()):
     # elif password != user.password:
     # elif password != user.password:
     #     raise InvalidCredentialsException
     #     raise InvalidCredentialsException
     else:
     else:
+        user_dict.update({"token":access_token})
+        token_update = user.update_from_dict(user_dict)
+        await user.save()
         stored_hashed_password = user.password.encode('utf-8')
         stored_hashed_password = user.password.encode('utf-8')
         if bcrypt.checkpw(password.encode('utf-8'),stored_hashed_password):
         if bcrypt.checkpw(password.encode('utf-8'),stored_hashed_password):
             return {'msg':'登入成功','code':'200','access_token': access_token,'username':user.username,'email':user.email,'points':user.points}
             return {'msg':'登入成功','code':'200','access_token': access_token,'username':user.username,'email':user.email,'points':user.points}
@@ -91,17 +100,21 @@ async def login(username: str = Form(default=''), password: str = Form(default='
     """
     """
     OAuth2 compatible token login, get an access token for future requests
     OAuth2 compatible token login, get an access token for future requests
     """
     """
-
+    access_token = manager.create_access_token(
+        data={'sub': username}
+    )
     user = await User.filter(email=email,is_gmail=1).first() # 確認信箱是否已存在
     user = await User.filter(email=email,is_gmail=1).first() # 確認信箱是否已存在
     if not user:
     if not user:
-        u = await User.create(username=username, password=password, email=email, is_gmail=1)
+        u = await User.create(username=username, password=password, email=email, is_gmail=1,token=access_token)
     # if user:
     # if user:
     #     print('已用相同信箱註冊過,再開一個GMAIL帳號')
     #     print('已用相同信箱註冊過,再開一個GMAIL帳號')
     #     u = await User.create(username=username, password=password,email=email,is_gmail=1)
     #     u = await User.create(username=username, password=password,email=email,is_gmail=1)
+    user_pydantic = UserPydantic.from_orm(user)
+    user_dict = user_pydantic.dict(exclude_unset=True)
+    user_dict.update({"token": access_token})
+    token_update = user.update_from_dict(user_dict)
+    await user.save()
 
 
-    access_token = manager.create_access_token(
-        data={'sub': username}
-    )
     return_msg = {
     return_msg = {
         "access_token": access_token,
         "access_token": access_token,
         "token_type": "bearer",
         "token_type": "bearer",

+ 14 - 0
app/models/models.py

@@ -15,6 +15,7 @@ class User(Model):
     is_superuser = fields.IntField(description="超級使用者")
     is_superuser = fields.IntField(description="超級使用者")
     is_gmail = fields.IntField(description="是否使用gmail登入")
     is_gmail = fields.IntField(description="是否使用gmail登入")
     token = fields.CharField(max_length=200)
     token = fields.CharField(max_length=200)
+<<<<<<< HEAD
 
 
 class UserPydantic(BaseModel):
 class UserPydantic(BaseModel):
     id: int
     id: int
@@ -27,7 +28,20 @@ class UserPydantic(BaseModel):
     token: str
     token: str
     class Config:
     class Config:
         orm_mode = True
         orm_mode = True
+=======
+>>>>>>> 097c59d02ac3490bfce014d7f28b0049719ef7ac
 
 
+class UserPydantic(BaseModel):
+    id: int
+    username: str
+    password: str
+    email: str
+    points: int
+    is_superuser: int
+    is_gmail: int
+    token: str
+    class Config:
+        orm_mode = True
 #學校
 #學校
 class Schools(Model):
 class Schools(Model):
     id = fields.IntField(pk=True)
     id = fields.IntField(pk=True)