認証
認証と認可は2つのセキュリティプロセスで、ウェブサイトやアプリのさまざまな部分に誰がアクセスできるかを制御するのに役立ちます。認証は訪問者のアイデンティティを検証するプロセスであり、認可は訪問者が保護されたルートやリソースにアクセスすることを許可するプロセスです。
認証を利用することで、ログインした個人に合わせてサイトの領域をカスタマイズしたり、個人情報やプライベートな情報を最大限に保護できるようになります。認証ライブラリ(例: Lucia Auth、Auth.js)は、電子メールサインインやOAuthプロバイダーなどの複数の認証方法のためのユーティリティを提供します。
Astro向けの公式の認証ソリューションはありませんが、インテグレーションディレクトリではコミュニティの “auth” インテグレーションが検索できます。
Lucia
セクションタイトル: LuciaLuciaは、フレームワークに依存しないセッションベースの認証ライブラリで、Astroをよくサポートしています。
インストール
セクションタイトル: インストール好きなパッケージマネージャでLuciaをインストールします。
npm install lucia
pnpm add lucia
yarn add lucia
Luciaの”Getting started in Astro”ガイドを使用し、Luciaをアダプタとともに初期化して、ユーザーとセッションを保存するデータベースをセットアップします。
Luciaの充実したAstroチュートリアルの1つに従って、ユーザー名とパスワードの認証またはGitHub OAuthをAstroプロジェクトに追加します。
次のステップ
セクションタイトル: 次のステップAuth.js
セクションタイトル: Auth.jsAuth.jsは、フレームワークに依存しない認証ソリューションです。Astro用のコミュニティによるフレームワークアダプタauth-astro
が利用できます。
インストール
セクションタイトル: インストール好きなパッケージマネージャで、astro add
コマンドを使ってastro-auth
を追加します。
npx astro add auth-astro
pnpm astro add auth-astro
yarn astro add auth-astro
手動インストール
セクションタイトル: 手動インストールastro-auth
を手動でインストールするには、パッケージマネージャで必要なパッケージをインストールします。
npm install auth-astro
pnpm add auth-astro @auth/core
yarn add auth-astro
その後、astro.config.*
ファイルのintegrations
プロパティを用いてインテグレーションを反映させます。
import { defineConfig } from 'astro/config';import auth from 'auth-astro';
export default defineConfig({ // ... integrations: [auth()],});
プロジェクトのルートディレクトリにauth.config.mjs
ファイルを作成します。サポートしたい任意の認証プロバイダまたは認証メソッドを、必要な環境変数とともに追加します。
import GitHub from '@auth/core/providers/github';import { defineConfig } from 'auth-astro';
export default defineConfig({ providers: [ GitHub({ clientId: import.meta.env.GITHUB_CLIENT_ID, clientSecret: import.meta.env.GITHUB_CLIENT_SECRET, }), ],});
まだ存在しなければ、プロジェクトのルートに.env
ファイルを作成します。以下の2つの環境変数を追加します。AUTH_SECRET
は最低32文字以上の秘密の文字列です。
AUTH_TRUST_HOST=trueAUTH_SECRET=<my-auth-secret>
サインインとサインアウトボタンは、scriptタグまたはクライアントサイドフレームワークのコンポーネント内でauth-astro/client
モジュールを使用することで追加できます。
---import Layout from 'src/layouts/Base.astro';---<Layout> <button id="login">ログイン</button> <button id="logout">ログアウト</button>
<script> const { signIn, signOut } = await import("auth-astro/client") document.querySelector("#login").onclick = () => signIn("github") document.querySelector("#logout").onclick = () => signOut() </script></Layout>
ユーザーのセッションは、getSession
メソッドを使って取得できます。
---import Layout from 'src/layouts/Base.astro';import { getSession } from 'auth-astro/server';
const session = await getSession(Astro.request);---<Layout> { session ? ( <p>{session.user?.name}さん、ようこそ</p> ) : ( <p>未ログイン</p> ) }</Layout>