ガイド

アプリにログインを追加する方法:パスワード、マジックリンク、Google、ロール

アプリにログインを追加するには、方式を1つ選びます。メールとパスワード、マジックリンク(メールで送られる1回限りのサインインリンク)、または「Googleでログイン」です。そして、ゼロから作るのではなく、実績のある認証ライブラリかホスト型プロバイダーで実装します。次に、各種類の利用者ができることを決め(ロール)、すべてのページとAPIリクエストで、サーバー側でそれを強制します。セッションは安全なクッキーを使い、期限があり、ログアウト時に適切に終了するようにしてください。

このガイドでは、それぞれの選択肢と、動くログインと安全なログインを分ける細部を説明します。その背後にある概念については、認証とはを参照してください。

まず決める:そもそもログインが必要か?

ログインは手間と責任を増やします。次のような場合に必要です。

  • 利用者が非公開のデータ(予約、文書、請求書)を持つ
  • 利用者が、他の人が見るものを変更できる
  • アクセスに料金を課す
  • 立場によって権限が異なる(オーナー、スタッフ、顧客)

マーケティングサイト、公開のディレクトリ、メールを送るだけのフォームには、ログインは不要かもしれません。ウェイトリストにアカウントは不要で、メール欄があれば十分です。

よく使われる4つのログイン方式

方式仕組み長所短所
メールとパスワード利用者がパスワードを作成し、アプリはそのハッシュを保存するおなじみで、メールに頼らず使えるパスワードの再設定、使い回し、漏えい。パスワードを安全に保存する必要がある
マジックリンク利用者がメールアドレスを入力し、送られてきたリンクをクリックするパスワードを保存する必要も、忘れることもないメール配信に依存する。ログインに時間がかかる
ワンタイムコード利用者がメールアドレスを入力し、6桁のコードを入力するリンクが違うブラウザで開いてしまう場合でも動くメールへの依存は同じ
ソーシャル/OAuth(Google、Apple、GitHub、Microsoft)別のプロバイダーが利用者が誰かを確認する利用者にとって最も速い。保存すべきパスワードがない利用者がそのアカウントを持っている必要がある。プロバイダー側での設定が必要

2つを組み合わせるアプリも多くあります。Googleでのサインインとメールのマジックリンクの組み合わせは人気で、パスワードを一切保存せずに多くの人をカバーできます。

メールとパスワード

パスワードを提供するなら、次の点は必ず守ってください。

  • 遅いパスワードハッシュのアルゴリズムでハッシュ化する。 OWASPのパスワード保管のガイダンスでは、Argon2idが推奨され、scrypt、bcrypt、PBKDF2が代替として挙げられています。平文で保存したり、高速な一般用のハッシュを使ったりしてはいけません。
  • パスワードの再設定 は、ランダムで1回限りのリンクを使い、期限が切れるようにし、確認済みのメールアドレスに送ります。
  • どのメールアドレスがアカウントを持つかを明かさない。 「入力されたメールアドレスが登録されていれば、再設定リンクを送信しました」の方が「アカウントが見つかりません」よりよいです。
  • ログインと再設定の試行にレート制限をかけ、パスワードの推測を遅らせる。
  • 長いパスワードとパスワードマネージャーを許可する。 変わった文字の組み合わせを強制するルールは使わないでください。

マジックリンクとワンタイムコード

マジックリンクは、利用者にメールで送られるサインインリンクです。クリックするとログインできます。ワンタイムコードは同じ考え方ですが、クリックではなく入力します。

  • リンクとコードはすぐに期限切れになり、1回だけ使えるようにします。
  • リンクは、クリックされた端末でログインさせるべきで、トークンがログやアナリティクスツールに残ってはいけません。
  • 信頼できるメール送信が必要です。アプリからメールを送る方法を参照してください。GmailとOutlookでテストし、迷惑メールフォルダも確認してください。

Googleでログイン(およびその他のOAuthプロバイダー)

「Googleでログイン」はOAuthとOpenID Connectを使います。Googleが利用者が誰かを確認し、アプリにそのメールアドレスと名前を伝えます。2026年9月時点の設定は、Google Cloud ConsoleのGoogle Auth Platformセクションで行います。

  1. プロジェクトを作成または選択し、ブランディングページを入力します。ここは、同意画面で利用者に表示される内容(アプリ名、サポート用メールアドレス、ロゴ)です。
  2. クライアントページで、「Webアプリケーション」の種類のクライアントを作成します。
  3. 承認済みのJavaScriptオリジンとリダイレクトURIを追加します。アプリが動いている正確なアドレスと、サインイン後にGoogleが利用者を戻す先のアドレスです。
  4. クライアントIDとクライアントシークレットを、アプリのシークレットに保存します。

GoogleのOAuthドキュメントによると、よく起きる問題は次のとおりです。

  • redirect_uri_mismatch:リダイレクトのアドレスは、httpとhttpsの違い、大文字と小文字、末尾のスラッシュを含め、完全に一致する必要があります。プレビュー用のアドレスと公開ドメインの両方を追加してください。
  • HTTPSが必須:リダイレクトURIはHTTPSを使う必要があります。開発中のlocalhostは例外です。
  • stateパラメーターは、戻ってきたときに確認して、クロスサイトのリクエストの偽造から守るべきです。優れたライブラリはこれを自動で行います。

基本的なログイン情報(名前、メール、プロフィール)だけを求める場合、Googleはアプリの検証は必須ではないとしています。利用者のGmail、Drive、カレンダーへのアクセスを求める場合は別で、検証が必要です。

自分で作るか、プロバイダーを使うか?

アプローチ例向いている場合
ホスト型の認証プロバイダーサインイン、利用者管理、セッションを代わりに提供するサービスセキュリティの責任を減らし、ログインを早く動かしたい
アプリ内の認証ライブラリフレームワーク向けのオープンソースライブラリ利用者を自分のデータベースに置きたく、利用者ごとの料金を避けたい
自分で書く—ほとんどの場合は避ける。微妙な詳細が多すぎる

最初の2つはどちらも妥当です。ホスト型のプロバイダーは多くを代行しますが、依存関係が増え、アクティブユーザーごとに料金がかかることもあります。現在の料金は各サイトで確認してください。ライブラリはすべてを自分のデータベースに保持できますが、正しく設定すべき部分が増えます。どちらを選んでも、パスワードやセッションのロジックを手書きせず、そのライブラリを使うようAIに依頼してください。

ロールと権限

ログインは、誰かが誰かを教えてくれます。権限は、その人が何をできるかを決めます。最初は単純にしておきましょう。

ロール典型的な権限
訪問者公開ページを見る
会員/顧客自分のレコードを見て編集する
スタッフ自分のチームまたは事業のすべてのレコードを見る。設定や請求は変更できない
オーナー/管理者ユーザーと請求を含むすべて

ロールの名前より重要なルールは次のとおりです。

  • 毎回、サーバーで確認する。 ページでボタンを隠しても、APIを直接呼び出す人を止めることはできません。
  • 所有者で範囲を絞る。 会員が「予約123」を取得しようとしたら、それが自分のものである場合にだけ返すべきです。
  • 利用者が自分で権限を上げられないようにする。 プロフィールの更新でブラウザから送られたロールのフィールドは無視してください。
  • 初期値はアクセスなし。 新しいルートは、あなたがそうしないと決めない限り、ログインを必要とすべきです。

2つのアカウントでテストしてください。一方でログインし、レコードのIDを控えます。もう一方でログインし、そのレコードを開こうとしてみます。完全なテスト方法は、セキュリティチェックリストにあります。

セッションのセキュリティ

ログイン後、アプリはセッションによって利用者を記憶します。通常はクッキーです。OWASPのセッション管理のガイダンスでは、次が推奨されています。

  • セッションクッキーにSecure(HTTPSのみ)、HttpOnly(ページのスクリプトから読めない)、SameSiteを設定する
  • ログイン時に新しいセッションIDを発行し、権限が変わるときにも再度発行する
  • アイドルタイムアウトと絶対的な最大有効期間を設け、サーバー側で強制する
  • ログアウトは、クッキーを削除するだけでなく、サーバー上でセッションを終了させる
  • 利用者がパスワードを変更したら、セッションを無効にする

ログイン用のトークンをブラウザのlocalStorageに保存する方法はチュートリアルでよく見られますが、ページで動くどのスクリプトにも見えてしまいます。Webアプリでは、安全なクッキーの方が通常はよいデフォルトです。

基本をカバーするプロンプト

このアプリにユーザーアカウントを追加して。利用者はメールとパスワード、またはGoogleでサインアップ、ログインできるようにして。独自の認証コードではなく、[ライブラリまたはプロバイダー]を使って。パスワードはArgon2idまたはbcryptでハッシュ化して。メールによるパスワード再設定を追加し、1時間で期限切れになる1回限りのリンクを使って。セッションは安全なHttpOnlyクッキーに保存して。/dashboardと、すべての/apiルートを保護し、ログインした利用者だけが使えるようにして。利用者が見られるのは自分のプロジェクトだけにして。すべてのユーザーを見られる「admin」ロールを追加して。/adminに入れるのは管理者だけにして、サーバーで確認して。

そのあとでテストします。サインアップ、ログアウト、ログイン、パスワードの再設定、ログアウト中に非公開のURLを試す、別の利用者のレコードを試す。

AIで作るログインのよくあるミス

  • 保護がページの中だけにある。 ページはログアウト中の利用者をリダイレクトしますが、APIは誰にでもデータを返してしまいます。
  • ブラウザ内のシークレット。 OAuthのクライアントシークレットや認証プロバイダーの管理キーは、サーバー側に置くべきものです。
  • プレビューのURLと公開URLの取り違え。 Googleのリダイレクトなどが、プレビューを指したままになっていると、公開後にログインが壊れます。
  • メールアドレスの確認がない。 誰でもanyone@company.comとしてサインアップできてしまいます。そのアドレスに紐付くものを与える前に、メールアドレスを確認してください。
  • 正常系だけをテストする。 間違ったパスワード、期限切れのリンク、2つ目のアカウントも試してください。

Mythexでのログインの追加

Mythexでは、アプリの利用者のためのログインは、アプリに追加するものです。Mythexの自分のアカウントとは別物です。MythexにはログインのためのプロダクトはないのでAuthライブラリかプロバイダーとそのキーを持ち込みます。

  1. 方式を選ぶ。例:自分のデータベースに保存するメールとパスワード、またはホスト型プロバイダーのSDK。
  2. 利用者を自分で保存するなら、アプリにデータベースが必要です。チャットで依頼するか、/databaseを使ってください。
  3. プロバイダーのキーをプロジェクトのシークレットに入れる(/secretsまたはプロジェクト設定)。
  4. 上のようなプロンプトを使い、プレビューでテストする。Googleでログインする場合は、プレビューと公開アドレスの両方のリダイレクトURIを追加してください。

ドキュメントのアプリにログインを追加するも参照してください。有料の製品を作るなら、SaaSのMVPの作り方で、アカウントと請求をまとめて扱っています。

よくある質問

アプリに追加するもっとも簡単なログインは何ですか?

ホスト型の認証プロバイダーや、よくメンテナンスされた認証ライブラリを使うのが、通常はもっとも簡単で安全です。セッション、パスワードの保管、再設定がすでに処理されているためです。Googleアカウントを持つ利用者にとっては、Googleでログインが最も手間の少ない選択肢です。

マジックリンクはパスワードより安全ですか?

パスワードの使い回しや弱いパスワードはなくなりますが、リスクは利用者のメールアカウントに移ります。リンクはすぐに期限切れになり、1回だけ使えるようにすべきです。小規模なアプリのほとんどでは、妥当な選択肢です。多くの場合、Googleでのログインと一緒に提供されます。

Googleでログインを追加するのに、Googleの承認は必要ですか?

基本的なログイン情報(名前、メール、プロフィール)だけを要求する場合、Googleの検証は必須ではないとされています。ただし、同意画面とOAuthクライアントは設定する必要があります。GmailやDriveなどの機密データへのアクセスを要求する場合は、Googleのアプリ検証が必要です。

ログインと権限の違いは何ですか?

ログイン(認証)は、利用者が誰かを確認します。権限(認可)は、その利用者が何を見たりできたりするかを決めます。アプリには両方が必要で、権限はリクエストのたびにサーバーで確認しなければなりません。

Mythex · Pricing · AIでなんでも作ろう · ウェブサイト・アプリのテンプレート · Mythexを比較 · AIアプリ開発用語集 · AIアプリ開発の無料ツール · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)