JWT를 생성한 후 Postman을 통해 GET API를 요청해 보자 1. auth 서버 실행 후 POST API를 통한 유저 bearer token을 생성한다. #포트를 8000번이 아닌 9000번에 열겠다. uvicorn auth:app --reload --port 9000 9000포트로 실행 시킨 이유 #auth.py로 토큰 생성 port:9000 #main.py로 데이터 요청 port:8000 2. main.py에서 get요청을 위해 auth의 함수를 import 한다. from auth import get_current_user, get_user_exception #GET API 생성 @app.get("/todos/user") async def read_all_by_user(user: dict ..
데이터베이스 내에서 Users와 Todos테이블간의 데이터끼리 관계 설정 해보기[사용자(User) - 할 일(Todo)] 1. auth.py 파일 실행 후 테스트 유저 생성 uvicorn auth:app --reload 2. 서버 실행을 닫고 터미널에서 생성 확인 ※ POST API로 만든 테스트 유저가 id:2로 생성되어있다. 3. todos테이블에 데이터 insert 후 select 확인 insert into todos (title, description, priority, complete, owner_id) values ("Take out the dog", "he needs to use the bathroom", 5, false, 1); insert into todos (title, descript..
Postman이란? 개발자들이 API를 디자인 / 빌드 / 테스트를 하고, 개발된 API를 문서화 또는 공유할 수 있는 플랫폼. 빠른 API 팀원들과의 공유 기능 API 사용의 내용과 기록 저장 1. 공식 홈페이지 접속 https://www.postman.com/ 2. window or mac icon 클릭 후 다운로드 3. GET요청을 사용해 보기 https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide 예제 - kakao API 검색 GET /v2/search/web HTTP/1.1 Host: dapi.kakao.com Authorization: KakaoAK ${REST_API_KEY} Parameter NameTypeDescription..
예외 처리를 함수로 만들어서 코드를 가독성이 좋게 만드는 것이 목표 1. 라이브러리 import #status 삽입 from fastapi import FastAPI, Depends, HTTPException, status 2. user 인증 에러 함수 def get_user_exception(): credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", headers={"WWW-Authenticate":"Bearer"}, ) return credentials_exception 3. token 인증 에러 함수 def token_exception(..
테스트는 x(나중에 다시) 함수 구현만 1. 라이브러리 import #JWTError 삽입 from jose import jwt, JWTError 2. 비동기 함수 구현 async def get_current_user(token: str = Depends(oauth2_bearer)): try: payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) username: str = payload.get("sub") user_id: int = payload.get("id") if username is None or user_id is None: raise HTTPException(status_code=404, detail="User not found")..
JWT를 생성하는 방법에 대해 알아보자 1. Python 라이브러리 설치 pip install "python-jose[cryptography"] 2. 라이브러리 가져오기 #OAuth2PasswordBearer 가져오기 from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer from datetime import datetime, timedelta from jose import jwt ※ OAuth2PasswordBearer를 가져오는 이유는 JWT가 실제로 베어 토큰 베어러 유형이기 때문이다. 3. 비밀키 and 알고리즘 설정 SECRET_KEY(비밀키) 생성하기 SECRET_KEY는 위에 설정한 값과 다르게 설정해야 한다...
로그인을 통해 사용자 인증을 시도해 보자 1. 사용자 인증을 위한 라이브러리 import from fastapi.security import OAuth2PasswordRequestForm #차후 에러문을 위한 HTTPException import from fastapi import FastAPI, HTTPException 2. password 일치여부 함수 생성 def verify_password(plain_password, hashed_password): return bcrypt_context.verify(plain_password, hashed_password) ※ verify(디코딩 패스워드, 인코딩 패스워드) 3. 유저 데이터를 쿼리로 가져와서 인증하는 함수 생성 def authenticate_u..
앞서 POST API에서 다뤘던 저장은 데이터베이스 저장이 아니었기에 이번장은 데이터베이스에 데이터를 저장해 보자 1. DB에 연결하기 위한 라이브러리 import from sqlalchemy.orm import Session from database import SessionLocal, engine #Depends 추가 from fastapi import FastAPI, Depends 2. Base를 상속받은 모든 클래스들을 데이터베이스 내에 테이블로 만든다. models.Base.metadata.create_all(bind=engine) 3. DB를 연결할 수 있는 함수 생성 def get_db(): try: db = SessionLocal() yield db finally: db.close() ※ ..
bcrypt 알고리즘을 사용해서 비밀번호를 암호화시켜 저장해 보자 1. bcrypt 설치 => 일반적으로 규정을 준수해야할 상황이 아니라면 구현이 쉽고 비교적 강력하다. 터미널에 pip install "passlib[bcrypt]" 다운 2. 라이브러리 import from passlib.context import CryptContext bcrypt_context = CryptContext(schemes=['bcrypt'], deprecated="auto") 3. 함수 생성 및 POST API 수정 def get_password_hash(password): return bcrypt_context.hash(password) @app.post("/create/user") async def create_new..
users 테이블에 유저 데이터를 저장할 POST API를 생성 1. 인증 관련 데이터를 다루기 위한 파이썬 파일 생성 TodoApp 하위에 파일을 만든다. 2. Users 클래스에 대한 BaseModel(유효성 검사) 생성 및 POST API 생성 ※id는 primary key로 따로 설정 x from fastapi import FastAPI from pydantic import BaseModel from typing import Optional import models class CreateUser(BaseModel): username: str email: Optional[str] first_name: str last_name: str password: str app = FastAPI() @app.p..