-
Notifications
You must be signed in to change notification settings - Fork 2
/
authentication.py
33 lines (31 loc) · 1.14 KB
/
authentication.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from fastapi import APIRouter, HTTPException, status
from fastapi.param_functions import Depends
from fastapi.security.oauth2 import OAuth2PasswordRequestForm
from sqlalchemy.orm.session import Session
from db.database import get_db
from db import models
from db.hash import Hash
from auth import oauth2
router = APIRouter(
tags=['authentication']
)
@router.post('/token')
def get_token(request: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
user = db.query(models.User).filter(models.User.username == request.username).first()
if not user:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail='Invalid credentials'
)
if not Hash.verify_password(user.password, request.password):
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail='Incorrect password'
)
access_token = oauth2.create_access_token(data={'sub': user.username})
return {
'access_token': access_token,
'token_type': 'bearer',
'user_id': user.id,
'username': user.username
}