auth.py は、ユーザー認証とアクセストークン(JWT)の発行・検証を担当する。
ユーザーはログイン時に一度だけ ユーザーID と パスワード を入力する。その後は、毎回パスワードを送る代わりに アクセストークン を使ってサーバーと通信する。
アクセストークン(JWT)は、主にヘッダー(アルゴリズム)・ペイロード(ユーザー情報など)・署名の3つで構成されている。
⸻
- アクセストークンを発行する
authenticate_user
ユーザーID・パスワード・DBセッションを受け取る。
- DBからユーザーを検索する。
- 保存されているハッシュ化済みパスワードを取得する。
- 入力されたパスワードと保存済みハッシュを照合する。
- 一致すれば、そのユーザー情報を返す。
create_access_token
トークンに含める情報(ユーザーIDなど)と有効期限を受け取り、JWTアクセストークンを生成して返す。
⸻
- アクセストークンを使ってAPIを利用する
get_current_user
リクエスト・アクセストークン・DBセッションを受け取る。
- リクエストヘッダーまたはCookieからアクセストークンを取得する。
- トークンをデコードしてユーザーIDを取り出す。
- DBにそのユーザーが存在するか確認する。
- 存在すれば、そのユーザー情報(またはユーザーID)を返す。
get_current_user の中では、次の関数が利用される。
authenticate_user
ログイン時にユーザーIDとパスワードを検証する。
verify_password
入力されたパスワードと、DBに保存されているハッシュ化済みパスワードを照合し、一致するかどうか(True / False)を返す。
get_password_hash
入力されたパスワードをハッシュ化して返す。新規登録やパスワード変更時に利用する。
参考
・chatGPT