Open4
【個人開発】FastAPI+vueを使用したToDoアプリの開発で詰まったところ
ToDoItemの更新に詰まった
- postリクエストでは、パラメータをクエリに含めることはしない
- postリクエストでは、パラメータはボディに含めるか、パスに含める
- 参考:https://qiita.com/sakuraya/items/6f1030279a747bcce648
親コンポーネントから子コンポーネントへのデータの渡し方
- 子コンポーネント
const props = defineProps({
timeToComplete: {
type: Number,
required: true,
},
});
- 親コンポーネント
<Timer :timeToComplete="timeToComplete" />
参考:
アクセストークンをHttpOnly Cookieに保存
response.set_cookie(
key="access_token",
value=f"Bearer {access_token}",
httponly=True,
secure=True,
domain="localhost", # Cookieをセットするドメイン
samesite="None", # クロスオリジンで重要
path="/",
expires=expires,
)
def create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:
to_encode = data.copy()
if expires_delta:
expire = datetime.now(timezone.utc) + expires_delta
else:
expire = datetime.now(timezone.utc) + timedelta(minutes=15)
to_encode.update({"exp": expire})
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt, expire
アクセトークンをCookieに保存する際、Cookieのexpiresの設定にはUTC datetimeを与える必要があるらしい。
token_type, access_token = get_authorization_scheme_param(authorization)
if token_type.lower() != "bearer":
raise credentials_exception
Cookieに保存しているのは、"Bearer {access_token}"なので、このままデコードはできず、上記のようにする必要がある。
また、Cookieを送受信する際は、withCredentials: true
をリクエストに含めなくてはならず、allow_credentials=True
も設定しなければならない。
参考
Cookie周り
response.set_cookie(
key="access_token",
value=f"Bearer {access_token}",
httponly=True,
secure=False,
domain="localhost", # Cookieをセットするドメイン
samesite="None", # クロスオリジンで重要
path="/",
expires=expires,
)
secure=False
に変更すると、Cookieが送信されない→samesite="None"
にはsecure=True
が必須なので、Cookieが送信されなかった(samesite="Strict"
に変更すると送信された)
また、samesite="Strict"
)でもうまく機能する→フロントエンドとバックエンドのどちらもhttp://localhost
でアクセスするから、同ドメインのアプリと認識されている(?)
参考