Closed
Description
Method refresh_token2
in /template_minimal/app/api/endpoints/auth.py
is overwriting the endpoint /refresh-token
in /docs and the response_model schemas.UserCreate
is incorrect.
Looks like a typo. I submitted a pull request to remove it.
@router.post("/refresh-token", response_model=schemas.Token)
async def refresh_token(
input: schemas.TokenRefresh, session: AsyncSession = Depends(deps.get_session)
):
"""
OAuth2 compatible token, get an access token for future requests using refresh token
"""
try:
payload = jwt.decode(
input.refresh_token,
config.settings.SECRET_KEY,
algorithms=[security.ALGORITHM],
)
token_data = schemas.TokenPayload(**payload)
except (jwt.JWTError, ValidationError):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Could not validate credentials",
)
if not token_data.refresh:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Could not validate credentials",
)
result = await session.execute(select(User).where(User.id == token_data.sub))
user: Optional[User] = result.scalars().first()
if user is None:
raise HTTPException(status_code=404, detail="User not found")
access_token, expire_at = security.create_access_token(user.id)
refresh_token, refresh_expire_at = security.create_refresh_token(user.id)
return {
"token_type": "bearer",
"access_token": access_token,
"expire_at": expire_at,
"refresh_token": refresh_token,
"refresh_expire_at": refresh_expire_at,
}
@router.post("/refresh-token", response_model=schemas.UserCreate)
async def refresh_token2(
input: schemas.TokenRefresh, session: AsyncSession = Depends(deps.get_session)
):
"""
OAuth2 compatible token, get an access token for future requests using refresh token
"""
try:
payload = jwt.decode(
input.refresh_token,
config.settings.SECRET_KEY,
algorithms=[security.ALGORITHM],
)
token_data = schemas.TokenPayload(**payload)
except (jwt.JWTError, ValidationError):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Could not validate credentials",
)
if not token_data.refresh:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Could not validate credentials",
)
result = await session.execute(select(User).where(User.id == token_data.sub))
user: Optional[User] = result.scalars().first()
if user is None:
raise HTTPException(status_code=404, detail="User not found")
access_token, expire_at = security.create_access_token(user.id)
refresh_token, refresh_expire_at = security.create_refresh_token(user.id)
return {
"token_type": "bearer",
"access_token": access_token,
"expire_at": expire_at,
"refresh_token": refresh_token,
"refresh_expire_at": refresh_expire_at,
}
Metadata
Metadata
Assignees
Labels
No labels