isirmtブログ
タグシリーズ投稿
お気に入りのタグ

ブログを書いている人

isirmt

ホームページ

GitHub
github_user_icon
isirmt
Software & Web
@isirmt

(管理者用)ダッシュボード

© isirmtBuild with NextjsBlogWithGitPAT  (21df4dc)
  1. 特定のアカウント以外はログインでエラーが出るようにする【Next.js + Auth.js】
  2. おまけ
共有
2026
2
5

特定のアカウント以外はログインでエラーが出るようにする【Next.js + Auth.js】

コメント: 0件
Auth.js
Next.js
isirmt.com v2 制作メモ (3件)

前の投稿

2026
1
15

シリーズ枠外のテキストもスライドアニメーションで表示するReactコンポーネント

テキストが長いときに、画面からはみ出したり完全に隠すのではなく、アニメーションを使って、テキストの左端と右端がスライドアニメーシ...

読み込み中
シリーズを表示
Next.js
React
Tailwind CSS
Web Animation API

次の投稿

最新の投稿です

Auth.js(NextAuth)でシングルサインオン(SSO)を実現する際,ログインできるユーザーを絞りたい場合があるかと思われます.

例えば,特定のユーザーのみにWEBアプリケーションを提供したい場合など...

Next.jsであればlibディレクトリにAuth.jsのコンフィグを記述しますが,callbacksではbooleanを返すことができるメソッドがあり,認証で失敗を返すことができるようになっています.

export const { auth, handlers, signIn, signOut } = NextAuth({
  // 略
  callbacks: {
    async signIn({ profile }) {
      return isAllowedEmail(profile?.email);
    },
  },
});

ポートフォリオの実装では,Googleアカウントを使ったSSOにしているのでメアドが取得できます.このメアドが許可されているのかを判定しています.返却されるものはtrueまたはfalseです.

signInメソッドでは次のような挙動をします

  • true: サインインのフローの継続
  • falseまたはエラーのスロー: フローを中断し,エラーページへリダイレクト

エラーページはカスタムできます.

/errorページへリダイレクト
export const { auth, handlers, signIn, signOut } = NextAuth({
  // 略
  pages: {
    error: "/error",
  },
});

ちなみに執筆時点ではカスタムエラーページが無いので,また実装します.

おまけ

isAllowedEmail関数を記載

export const isAllowedEmail = (email: string | null | undefined) => {
  const allowedEmailsEnv = process.env.ADMIN_ALLOWED_EMAILS || "";
  const allowedEmails = allowedEmailsEnv
    .split(",")
    .map((e) => e.trim().toLowerCase())
    .filter(Boolean);

  if (!email) return false;
  const normalizedEmail = email.trim().toLowerCase();
  return allowedEmails.includes(normalizedEmail);
};

環境変数にADMIN_ALLOWED_EMAILSを設け,カンマ区切りでメアドを読みだしています.メアドはLowerCaseへ変換した上で比較を行っています.

個人サイトなら多分これで十分だと思います

あとは間違って公開しないことだけ気を付けておけば大丈夫かと思います.

コメント

自動更新
コメントはまだありません
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.