[관리자 페이지] Admin Page - 회원가입 구현하기 #6 JWT 토큰 발행
[JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
jwt.io](https://jwt.io/)
아이디 / 패스워드로 사용자 로그인을 성공하면 jwt 를 발급합니다.
accessToken, refreshToken 2개를 발급합니다.
import jwt
from datetime import datetime, timedelta
from dotenv import load_dotenv
import os
load_dotenv(os.path.join(os.path.dirname(__file__), "..", "..", ".env"))
class CommonUtils:
ACCESS_TOKEN_EXPIRE = os.getenv("ACCESS_TOKEN_EXPIRE")
REFRESH_TOKEN_EXPIRE = os.getenv("REFRESH_TOKEN_EXPIRE")
SECRET_KEY = os.getenv("SECRET_KEY")
@staticmethod
def create_token(user_info):
today = datetime.now()
access_token_expire_time = today + timedelta(seconds=float(CommonUtils.ACCESS_TOKEN_EXPIRE))
refresh_token_expire_time = today + timedelta(seconds=float(CommonUtils.REFRESH_TOKEN_EXPIRE))
access_token_payload = {"iat": today, "iss": "hiio420.com", "exp": access_token_expire_time,
"sub": "Access Token",
"userId": user_info.id}
access_token = jwt.encode(access_token_payload, "secret", algorithm="HS256")
refresh_token_payload = {"iat": today, "iss": "hiio420.com", "exp": refresh_token_expire_time,
"sub": "Refresh Token",
"userId": user_info.id}
refresh_token = jwt.encode(refresh_token_payload, CommonUtils.SECRET_KEY, algorithm="HS256")
return {"access_token": access_token, "refresh_token": refresh_token}
.env 파일을 사용합니다.
.env 파일에는 token의 만료 시간과 토큰 발행에 사용할 시크릿 문자열이 있습니다.
유틸을 만든 이유는 나중에 이부분만 다른 프로젝트에도 사용될 수 있지 않을까하는 생각에 만들었습니다.
## UserService class
...
def get_token(self, user_info: UserModel) -> TokenModel:
token = CommonUtils.create_token(user_info)
return TokenModel(accessToken=token["access_token"], refreshToken=token["refresh_token"])
UserService에 get_token을 만들고 user_info를 파라미터로 전달합니다.
get_token은 TokenModel을 반환합니다.
from pydantic import BaseModel, Field
class TokenModel(BaseModel):
accessToken: str = Field("", title="Access Token")
refreshToken: str = Field("", title="Refresh Token")
@api_main.post("/signin",response_model=TokenModel)
def signin(user: UserWithPasswordModel):
user: UserModel = userService.sign_in(user)
return userService.get_token(user)
'project > 관리자 페이지' 카테고리의 다른 글
[관리자 페이지] Spring Boot 3 으로 다시 만들기 # 0 (0) | 2024.05.03 |
---|---|
[관리자 페이지] Admin Page - Admin - SignIn 페이지 #7 Token 체크 리다이렉트 (0) | 2024.04.09 |
[관리자 페이지] Admin Page - 회원가입 구현하기 #5 비밀번호 체크 (0) | 2024.04.01 |
[관리자 페이지] Admin Page - 회원가입 구현하기 #4 비밀번호 암호화 (0) | 2024.03.31 |
[관리자 페이지] Admin Page - 회원가입 구현하기 #3 Insert User Data (0) | 2024.03.30 |