生成AIアプリドキュメント
Dokploy

認証済みユーザのメールアドレス取得

Dokployでデプロイしたアプリで認証済みユーザのメールアドレスを取得する方法

Dokployでデプロイされたアプリケーションは、自動的にEntra IDによるグローバル認証が適用されます。認証済みユーザの情報はHTTPヘッダーを通じて取得できます。

概要

Dokployのリバースプロキシは、認証済みユーザのメールアドレスを X-Forwarded-User ヘッダーに設定してアプリケーションに転送します。

最小コード

TypeScript / JavaScript

const email = request.headers.get("X-Forwarded-User");

Python (FastAPI)

from fastapi import Request

@app.get("/")
async def root(request: Request):
    email = request.headers.get("X-Forwarded-User")

Python (Streamlit)

import streamlit as st

email = st.context.headers.get("X-Forwarded-User")

これだけで認証済みユーザのメールアドレスを取得できます。

Next.js API Routeでの実装例

以下は、認証チェックを行うAPI Routeの実装例です。

app/api/check-auth/route.ts
import { NextResponse } from "next/server";

export async function GET(request: Request) {
  try {
    // Get email from X-Forwarded-User header (set by traefik-forward-auth)
    const forwardedUser = request.headers.get("X-Forwarded-User");

    if (!forwardedUser) {
      return NextResponse.json(
        {
          authenticated: false,
          error: "認証されていません",
        },
        { status: 401 },
      );
    }

    // Validate email format
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(forwardedUser)) {
      return NextResponse.json(
        {
          authenticated: false,
          error: "無効な認証情報です",
        },
        { status: 400 },
      );
    }

    return NextResponse.json({
      authenticated: true,
      email: forwardedUser,
    });
  } catch (error) {
    console.error("Auth check error:", error);
    return NextResponse.json(
      {
        authenticated: false,
        error: "認証チェックに失敗しました",
      },
      { status: 500 },
    );
  }
}

Server Componentでの使用例

Next.jsのServer Componentで使用する場合は、headers() 関数を使用します。

app/page.tsx
import { headers } from "next/headers";

export default async function Page() {
  const headersList = await headers();
  const email = headersList.get("X-Forwarded-User");

  return (
    <div>
      <p>ログインユーザ: {email ?? "未認証"}</p>
    </div>
  );
}

注意事項

このヘッダーはDokployのリバースプロキシによって設定されるため、Dokploy環境でのみ機能します。ローカル開発環境では別途モックを用意するか、環境変数で切り替える必要があります。

X-Forwarded-User ヘッダーはクライアントからの偽装が可能なため、必ずDokployのリバースプロキシ経由でのみアクセスできる環境で使用してください。Dokploy環境では、リバースプロキシがクライアントからのヘッダーを上書きするため安全です。

On this page