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の実装例です。
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() 関数を使用します。
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環境では、リバースプロキシがクライアントからのヘッダーを上書きするため安全です。