사용자가 앱 로그인할 때, 백엔드가 인증 토큰이나 세션 관련 데이터를 응답에 담아 보내면, 네이티브 앱이 받아서 로컬에 저장 250219
q1: 사용자가 앱(네이티브 클라이언트)에서 로그인할 때, 백엔드가 인증 토큰이나 세션 관련 데이터를 응답에 담아 보내면, 이 데이터를 네이티브 앱이 받아서 로컬(쿠키 또는 내부 저장소)에 저장
a1:
예를 들어 사용자가 앱(네이티브 클라이언트)에서 로그인할 때, 백엔드가 인증 토큰이나 세션 관련 데이터를 응답에 담아 보내면, 이 데이터를 네이티브 앱이 받아서 로컬(쿠키 또는 내부 저장소)에 저장할 수 있다는 의미입니다. 이렇게 저장된 쿠키는 이후에 앱이 API를 호출할 때 자동으로 포함되어, 사용자의 인증 상태나 세션 정보를 유지하는 데 활용됩니다.
예를 들어, FastAPI에서는 응답 객체의 set_cookie() 메서드를 사용해 쿠키를 설정할 수 있습니다. 아래는 로그인 시 인증 토큰을 쿠키에 저장하는 간단한 예제 코드입니다.
from fastapi import FastAPI, Response, Cookie, HTTPException
from fastapi.responses import JSONResponse
app = FastAPI()
# 로그인 엔드포인트: 로그인 성공 시 "auth_token"이라는 이름의 쿠키를 설정합니다.
@app.post("/login")
def login(response: Response):
# 예시로 고정된 토큰을 사용 (실제 서비스에서는 동적으로 생성)
token = "my-secret-auth-token"
# 쿠키 설정: key, value, HttpOnly 옵션(자바스크립트에서 접근 불가능)
response.set_cookie(key="auth_token", value=token, httponly=True, max_age=3600)
return {"message": "로그인 성공, 쿠키에 토큰이 저장되었습니다."}
# 보호된 엔드포인트: 요청 시 쿠키에서 "auth_token"을 읽어 인증 상태를 확인합니다.
@app.get("/profile")
def profile(auth_token: str = Cookie(None)):
if not auth_token:
raise HTTPException(status_code=401, detail="인증 토큰이 없습니다.")
return {"message": "인증된 사용자", "token": auth_token}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
코드 설명
• 로그인 엔드포인트 (/login):
사용자가 로그인하면 백엔드에서 인증 토큰(여기서는 “my-secret-auth-token”)을 생성하여 응답 객체(response)의 set_cookie() 메서드를 통해 “auth_token”이라는 이름의 쿠키에 저장합니다. 이 쿠키는 HttpOnly 옵션으로 설정되어 자바스크립트로부터 접근이 차단됩니다.
• 보호된 엔드포인트 (/profile):
클라이언트가 이 엔드포인트에 요청할 때, 쿠키에 저장된 “auth_token” 값을 읽어 인증 상태를 확인합니다. 만약 토큰이 없다면 401 오류를 반환합니다.
이 방식은 백엔드에서 특정 시점(예: 로그인 시)에 데이터를 네이티브 클라이언트로 전달하고, 클라이언트가 그 데이터를 쿠키에 저장하여 이후 요청에 활용할 수 있도록 하는 일반적인 패턴입니다. 네이티브 앱에서도 WebView나 HTTP 클라이언트를 통해 쿠키를 자동으로 저장하고 전송할 수 있습니다.