fix: login failed message.

This commit is contained in:
EstrellaXD
2023-09-19 14:14:51 +08:00
parent 8637e0b73f
commit f2d87f346e
7 changed files with 66 additions and 51 deletions

View File

@@ -4,6 +4,8 @@ from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
from fastapi.responses import JSONResponse, Response
from .response import u_response
from module.models.user import User, UserUpdate
from module.models import APIResponse
from module.security.api import (
@@ -20,13 +22,14 @@ router = APIRouter(prefix="/auth", tags=["auth"])
@router.post("/login", response_model=dict)
async def login(response: Response, form_data=Depends(OAuth2PasswordRequestForm)):
user = User(username=form_data.username, password=form_data.password)
auth_user(user)
token = create_access_token(
data={"sub": user.username}, expires_delta=timedelta(days=1)
)
response.set_cookie(key="token", value=token, httponly=True, max_age=86400)
return {"access_token": token, "token_type": "bearer"}
resp = auth_user(user)
if resp.status:
token = create_access_token(
data={"sub": user.username}, expires_delta=timedelta(days=1)
)
response.set_cookie(key="token", value=token, httponly=True, max_age=86400)
return {"access_token": token, "token_type": "bearer"}
return u_response(resp)
@router.get("/refresh_token", response_model=dict, dependencies=[Depends(get_current_user)])
async def refresh(response: Response):

View File

@@ -8,7 +8,6 @@ def u_response(response_model: ResponseModel):
return JSONResponse(
status_code=response_model.status_code,
content={
"status": response_model.status,
"msg_en": response_model.msg_en,
"msg_zh": response_model.msg_zh,
},

View File

@@ -3,6 +3,7 @@ import logging
from fastapi import HTTPException
from module.models.user import User, UserUpdate, UserLogin
from module.models import ResponseModel
from module.security.jwt import get_password_hash, verify_password
from sqlmodel import Session, select
@@ -20,14 +21,29 @@ class UserDatabase:
raise HTTPException(status_code=404, detail="User not found")
return result
def auth_user(self, user: User) -> bool:
def auth_user(self, user: User):
statement = select(User).where(User.username == user.username)
result = self.session.exec(statement).first()
if not result:
raise HTTPException(status_code=401, detail="User not found")
return ResponseModel(
status_code=401,
status=False,
msg_en="User not found",
msg_zh="用户不存在"
)
if not verify_password(user.password, result.password):
raise HTTPException(status_code=401, detail="Password error")
return True
return ResponseModel(
status_code=401,
status=False,
msg_en="Incorrect password",
msg_zh="密码错误"
)
return ResponseModel(
status_code=200,
status=True,
msg_en="Login successfully",
msg_zh="登录成功"
)
def update_user(self, username, update_user: UserUpdate):
# Update username and password

View File

@@ -45,9 +45,10 @@ def update_user_info(user_data: UserUpdate, current_user):
def auth_user(user: User):
with Database() as db:
if db.user.auth_user(user):
resp = db.user.auth_user(user)
if resp.status:
active_user.append(user.username)
return True
return resp
UNAUTHORIZED = HTTPException(