Flask Academy · レッスン

認証が必要なエンドポイントをテストする

テスト内でログインし、保護されたルートにアクセスします

レッスン 4/413 ステップ

「認証が必要なエンドポイントをテストする」はCoddyKit上の無料Flask Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFlask Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Flask Academyコースには全4レッスンが含まれています。

認証テストの課題

保護されたルートは匿名ユーザーのアクセスを拒否します。テストするには、実際のユーザーと同じように、clientでまずlog inしてから保護されたページにアクセスする必要があります。

ガードが機能することを確認する

まず、入口が閉じていることを確認します。ログアウトした状態でルートをリクエストし、redirectまたは401レスポンスが返ることをアサートします。

resp = client.get('/dashboard')
assert resp.status_code == 302

ログインルートからログインする

現実的な認証方法は、ログインエンドポイントにpost credentialsすることです。clientがセッションCookieを自動的に保存します。

client.post('/login', data={'email': 'a@b.com', 'password': 'pw'})

ClientはCookieを保持する

便利な点として、test clientは呼び出しの間もremembers cookiesします。ログイン後のリクエストは、追加の処理なしで認証済みの状態になります。

保護されたルートにアクセスする

ログインできたので、もう一度保護されたページをリクエストします。今回は200が返り、保護された内容が表示されることをアサートします。

resp = client.get('/dashboard')
assert resp.status_code == 200

ログイン用のヘルパー

ログインのPOSTを繰り返すとコードが煩雑になります。小さなhelper関数にまとめれば、すべての認証テストを1行で読みやすく書けます。

def login(client):
    return client.post('/login', data={'email': 'a@b.com', 'password': 'pw'})

認証済みのFixture

さらに、already-logged-in状態のclientを返すfixtureを作ると便利です。認証が必要なテストはそれを要求するだけで、セットアップを省略できます。

@pytest.fixture
def auth_client(client):
    login(client)
    yield client

ログアウトの流れをテストする

ログアウトが機能するまで認証のテストは完了しません。/logoutにアクセスし、保護されたルートが匿名状態に戻ったclientを再び拒否することを確認します。

client.get('/logout')
assert client.get('/dashboard').status_code == 302

速度のためにログインをバイパスする

Flask-Loginアプリでは、フォームを省略してsessionを直接設定できます。高速になりますが、実際のログイン処理をテストする範囲は狭くなります。

with client.session_transaction() as sess:
    sess['_user_id'] = '1'

トークンで保護されたAPIをテストする

JWT APIにはCookieがありません。保護されたエンドポイントにアクセスするには、各リクエストのAuthorization headerにトークンを含めます。

client.get('/api/me', headers={'Authorization': 'Bearer ' + token})

ガードの両側をテストする

堅牢な認証テストではboth outcomesを確認します。匿名ユーザーは拒否され、認証済みユーザーは許可されることを検証します。成功するパスと失敗するパスの両方をテストしてください。

クイックチェック

ログインユーザー専用のダッシュボードをテストする必要があります。機能させるには何が必要ですか?

まとめ:認証済みテスト

clientでログインし、そのcookie memoryを活用して、拒否されるパスと許可されるパスの両方をアサートしました。これで認証処理を完全にテストできます。🔐

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「認証が必要なエンドポイントをテストする」レッスンは無料ですか?

はい。「認証が必要なエンドポイントをテストする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Flask Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Flask Academyコースには全4レッスンが含まれています。

「認証が必要なエンドポイントをテストする」で何を学びますか?

テスト内でログインし、保護されたルートにアクセスします ブラウザで直接実行するハンズオンコードでFlask Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Flask Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFlask Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「認証が必要なエンドポイントをテストする」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFlask Academyレッスンでコードを書いて実行できますか?

はい。すべてのFlask Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. テストクライアントとフィクスチャ
  2. ルートとJSONをアサートする
  3. テスト用データベースでテストを分離する
  4. 認証が必要なエンドポイントをテストする
← Flask Academyに戻る