|
@@ -1,6 +1,6 @@
|
|
|
from fastapi import APIRouter, Form, Depends, HTTPException, Body
|
|
|
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 sqlalchemy.orm import Session
|
|
|
from typing import Any, Dict, Optional
|
|
@@ -15,6 +15,8 @@ import emails
|
|
|
from emails.template import JinjaTemplate
|
|
|
import logging
|
|
|
import bcrypt
|
|
|
+
|
|
|
+from app.crud import crud_users
|
|
|
import smtplib
|
|
|
from email.mime.text import MIMEText
|
|
|
from google.oauth2 import id_token
|
|
@@ -38,6 +40,7 @@ async def query_user(user_id: str):
|
|
|
:return: None or the user object
|
|
|
"""
|
|
|
result = await User.filter(email=user_id,is_gmail=0).first()
|
|
|
+
|
|
|
if not result:
|
|
|
print('無此筆資料')
|
|
|
return None
|
|
@@ -60,15 +63,18 @@ async def query_user_username(user_id: str):
|
|
|
|
|
|
|
|
|
@users.post("/login")
|
|
|
-async def login(data: OAuth2PasswordRequestForm = Depends()):
|
|
|
+async def login(data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(deps.get_db)):
|
|
|
+
|
|
|
email = data.username
|
|
|
password = data.password
|
|
|
|
|
|
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(
|
|
|
data={'sub': email}
|
|
|
)
|
|
|
+
|
|
|
if not user:
|
|
|
# you can return any response or error of your choice
|
|
|
return {"message":"查無此人"}
|
|
@@ -76,6 +82,9 @@ async def login(data: OAuth2PasswordRequestForm = Depends()):
|
|
|
# elif password != user.password:
|
|
|
# raise InvalidCredentialsException
|
|
|
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')
|
|
|
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}
|
|
@@ -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
|
|
|
"""
|
|
|
-
|
|
|
+ access_token = manager.create_access_token(
|
|
|
+ data={'sub': username}
|
|
|
+ )
|
|
|
user = await User.filter(email=email,is_gmail=1).first() # 確認信箱是否已存在
|
|
|
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:
|
|
|
# print('已用相同信箱註冊過,再開一個GMAIL帳號')
|
|
|
# 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 = {
|
|
|
"access_token": access_token,
|
|
|
"token_type": "bearer",
|