ログイン・会員機能の基本

この機能は Ver. 3.1 以上のバージョンから利用できます。


a-blog cms では、会員制サイトを作成するための会員機能が標準機能として搭載されています。SNSログインや2段階認証など、メールアドレス/ユーザーIDとパスワード以外でのログイン認証についても標準機能としてサポートされている他、パスワードポリシー設定などのセキュリティに関する設定も標準機能として提供されています。


また、管理者用のログインURLと会員用のログインURLを別々に設定できるため、セキュリティ的にも安全な会員制サイトを制作することができます。

主な機能としては以下のようなものがあげられます。

  • メールアドレスとパスワードによるサインイン認証
  • SNSアカウントによるサインイン認証
  • 2段階認証
  • メール認証サインイン機能
  • 会員サインアップ(会員登録)フォーム
  • メールアドレス認証機能
  • パスワードリセット機能
  • マイページ機能(プロフィール情報変更機能)
  • メールアドレス変更機能
  • パスワード変更機能
  • 退会機能
  • パスワードポリシー(パスワードのルール)の設定

公式テーマの一つである member テーマは、会員機能のカスタマイズ例として活用することができます。会員制サイトを制作する際は是非参考にしてください。

member テーマについてもっと知りたい方は memberテーマの使い方を御覧ください。


認証に関連するページとURLについて


管理者ログインページや、会員サインインページなど、認証に関連するページと、そのページがどのようなURLで表示されるかを説明します。



ページ 説明 デフォルトURL
管理ログインページ 管理ユーザーがログインするためのページです /login/
管理ユーザー用パスワード再設定ページ 管理ユーザーがパスワードを忘れた時、パスワードを再設定するページです /admin-reset-password/
管理ユーザー用パスワード再設定の認証ページ 管理ユーザーがパスワードを再設定するため、認証メールの送信を行うページです /admin-reset-password-auth/
管理ユーザー用2段階認証解除ページ 管理ユーザーがリカバリーコードにより、2段階認証を解除するページです /admin-tfa-recovery/
サインインページ 一般(会員ユーザー)がサインインするためのページです /signin/
会員登録ページ 一般(会員ユーザー)が会員登録するためのページです /signup/
一般(会員ユーザー)ユーザー用パスワード再設定ページ 一般(会員ユーザー)がパスワードを忘れた時、パスワードを再設定するページです /reset-password/
一般(会員ユーザー)ユーザー用パスワード再設定の認証ページ 一般(会員ユーザー)がパスワードを再設定するため、認証メールの送信を行うページです /reset-password-auth/
一般(会員ユーザー)ユーザー用2段階認証解除ページ 一般(会員ユーザー)ユーザーがリカバリーコードにより、2段階認証を解除するページです /tfa-recovery/
プロフィール更新ページ ログイン後、自身のプロフィールを変更するページです /mypage/update-profile/
メールアドレス変更ページ ログイン後、自身のメールアドレスを変更するページです /mypage/update-email/
パスワード変更ページ ログイン後、自身のパスワードを変更するページです /mypage/update-password/
2段階認証設定ページ ログイン後、2段階認証の設定を行うページです /mypage/update-tfa/
退会ページ 一般(会員ユーザー)が退会するページです /mypage/withdrawal/

以下のページはコンフィグの設定に関わらず、ページキャッシュ機能が無効になります。

  • プロフィール更新ページ
  • メールアドレス変更ページ
  • パスワード変更ページ
  • 2段階認証設定ページ
  • 退会ページ

認証に関連するページのURLを変更する


認証に関連するページのURLは config.server.php から変更することができます。



定数 説明 デフォルト値
LOGIN_SEGMENT 管理ログインページのパス login
ADMIN_RESET_PASSWORD_SEGMENT 管理ユーザー用パスワード再設定ページのパス admin-reset-password
ADMIN_RESET_PASSWORD_AUTH_SEGMENT 管理ユーザー用パスワード再設定の認証ページのパス admin-reset-password-auth
ADMIN_TFA_RECOVERY_SEGMENT 管理ユーザー用2段階認証解除ページのパス admin-tfa-recovery
SIGNIN_SEGMENT 一般サインインページのパス signin
SIGNUP_SEGMENT 会員登録ページのパス signup
RESET_PASSWORD_SEGMENT 一般ユーザー用パスワード再設定ページのパス reset-password
RESET_PASSWORD_AUTH_SEGMENT 一般ユーザー用パスワード再設定の認証ページのパス reset-password-auth
TFA_RECOVERY_SEGMENT 一般ユーザー用2段階認証解除ページのパス tfa-recovery
PROFILE_UPDATE_SEGMENT 自身のプロフィール変更ページのパス mypage/update-profile
PASSWORD_UPDATE_SEGMENT 自身のパスワード変更ページのパス mypage/update-password
EMAIL_UPDATE_SEGMENT 自身のメールアドレス変更ページのパス mypage/update-email
TFA_UPDATE_SEGMENT 自身の2段階認証設定ページのパス mypage/update-tfa
WITHDRAWAL_SEGMENT 自身の退会ページのパス mypage/withdrawal

config.server.php で設定した各ページのパスはグローバル変数として表示できます。

テンプレート上はグローバル変数でURLを表示することで、あとから設定を変更した場合でもテンプレートの修正が必要なくなり、変更に強いテンプレートを作成することができます。

グローバル変数


管理ユーザーと一般(会員ユーザー)について


管理ユーザーと一般(会員ユーザー)をどのように分けているかについて説明いたします。

管理ユーザーは一般サインイン画面からログインはできず、管理ログイン画面からのみログインできます。一般(会員ユーザー)は管理ログイン画面からログインできず、一般サインイン画面からのみログインできます。

デフォルトの分け方は以下のように、読者権限のユーザーのみが一般(会員ユーザー)として扱われます。



タイプ ユーザー権限
管理ユーザー 管理者・編集者・投稿者
一般(会員ユーザー) 読者

投稿者を一般(会員ユーザー)として扱いたいなど、管理ユーザーと一般(会員ユーザー)の権限を変更したい場合は、管理画面 > コンフィグ > ログイン設定 の「基本設定」から「一般サインイン権限」で設定を変更することができます。


一般サインイン権限を設定する

一般サインイン権限を設定する


認証に関連するテンプレート

管理ログインページや会員登録ページなど認証に関連するテンプレートについて説明します。

管理ユーザー向けのテンプレート

管理ユーザー向けのテンプレートについて説明します。管理ユーザー向けのテンプレートのため基本的にカスタマイズが必要になることはありません。



パス 説明
_member-admin/login.html 管理ログインするためのテンプレート
_member-admin/reset-password.html 管理ユーザーのパスワード再設定のためのテンプレート
_member-admin/reset-password-auth.html 管理ユーザーのパスワード再設定リンク先のテンプレート
_member-admin/tfa-recovery.html 管理ユーザーが2段階認証を解除するためのテンプレート

会員ユーザー向けのテンプレート

会員ユーザー向けのテンプレートについて説明します。会員制サイトを制作する場合にカスタマイズするテンプレートになります。



パス 説明
_member/signin.html 会員サインインするためのテンプレート
_member/signup.html 会員登録するためのテンプレート
_member/reset-password.html 会員のパスワード再設定するためのテンプレート
_member/reset-password-auth.html 会員のパスワード再設定リンク先のテンプレート
_member/tfa-recovery.html 会員が2段階認証を解除するためのテンプレート
_member/update-email.html ログイン後、メールアドレスを更新するためのテンプレート
_member/update-password.html ログイン後、パスワードを更新するためのテンプレート
_member/update-profile.html ログイン後、ユーザー情報を更新するためのテンプレート
_member/update-tfa.html ログイン後、2段階認証を設定・解除するためのテンプレート
_member/withdrawal.html 会員ユーザーが退会するためのテンプレート

テンプレートのパスを変更する

管理ユーザー向けのテンプレート及び、会員ユーザー向けのテンプレートは、config.system.yaml または、使用しているテーマ直下のtemplate.yaml から変更することができます。

tpl_login: _member-admin/login.html
tpl_admin-reset-password: _member-admin/reset-password.html
tpl_admin-reset-password-auth: _member-admin/reset-password-auth.html
tpl_admin-tfa-recovery: _member-admin/tfa-recovery.html
tpl_signin: _member/signin.html
tpl_signup: _member/signup.html
tpl_reset-password: _member/reset-password.html
tpl_reset-password-auth: _member/reset-password-auth.html
tpl_tfa-recovery: _member/tfa-recovery.html
tpl_update-profile: _member/update-profile.html
tpl_update-password: _member/update-password.html
tpl_update-email: _member/update-email.html
tpl_update-fta: _member/update-tfa.html
tpl_withdrawal: _member/withdrawal.html

シークレットステータスのブログ・カテゴリーにアクセスしたときに表示されるログインページ

シークレットカテゴリやシークレットブログに設定しているページにアクセスした場合、通常、ログインページが表示されます。

このとき、管理ログインページと一般サインインページのどちらを表示させたいかはサイトの仕様によるため、コンフィグから管理ログインページと一般サインインページのどちらを表示させるかを設定できるようになっています。

管理ページ > コンフィグ > ログイン設定の「ログインページの指定」で行います。


ログインページの指定の設定

ログインページの指定の設定


一般的には、会員サイトであればデフォルト値である「一般サインイン画面」を設定するのがおすすめです。

パスワードによる会員サインイン

a-blog cms には、会員登録した会員ユーザーがサイトにサインインできる機能が標準機能として提供されています。

これにより、特定のページや一部の記事は会員としてサインインしたユーザーにしか見ることができない Webサイトを制作することができます。

このドキュメントでは、会員ユーザーがメールアドレス/ユーザーIDとパスワードを使用したサインイン認証について説明します。

Member_Signin モジュール

会員サインイン機能は、Member_Signin モジュールとして提供しています。

Member_Signin モジュールで表示できる内容は、大きくの3つのブロックに別れます。



ブロック名 概要
signin メールアドレスとパスワードを入力するフォームを表示します。
verifyCode メールアドレス認証でサインインしようとした場合に、メールアドレス認証メールに記載されている認証コードを入力するフォームを表示します。
tfa 2段階認証を有効にしている場合、2段階認証コードを入力するフォームを表示します。

メールアドレスとパスワードによる認証では signin ブロック内にメールアドレスとパスワードを入力するフォームを設置し、ユーザーに入力・送信してもらうことで認証を行います。

また、上記のブロックでは以下の変数が利用できます。



変数名 概要
trialTime コンフィグ > ログイン設定 > セキュリティのアカウントロックで設定した、パスワード認証の再試行制限の時間(分) 5
trialNumber コンフィグ > ログイン設定 > セキュリティのアカウントロックで設定した、パスワード認証の再試行制限の回数 5
lockTime コンフィグ > ログイン設定 > セキュリティのアカウントロック時間で設定したアカウントがロックされた場合の時間(分) 5
email_auth_login コンフィグ > ログイン設定 > セキュリティのメール認証サインイン(管理ログイン)から、メール認証での管理ログインが有効かどうか(on | off) off
email_auth_signin コンフィグ > ログイン設定 > セキュリティのメール認証サインイン(管理ログイン)から、メール認証でのサインインが有効かどうか(on | off) off

パスワードによる会員サインインフォームの送信

Member_Signin モジュールは、パスワードによるサインイン認証をするためのPOSTモジュールです。

このモジュールではフォームから送信されたメールアドレスとパスワードの値でサインイン認証を行います。

送信できる項目

Member_Signin モジュールで送信できる項目については以下の項目になります。

また、Member_Signin モジュールで送信するフィールド(項目)は name 属性に login[] を、 value 属性に 送信したい項目名を指定した input タグを一緒に記述する必要があります。

<input
  type="password"
  name="pass"
  value="{pass}"
  id="input-password"
  class="acms-form-large acms-form-block acms-form-width-full"
  autocomplete="current-password"
/>
<input type="hidden" name="login[]" value="pass" />


項目名 概要 入力例
mail ログインするユーザーのメールアドレスまたは、ユーザーIDです。 info@example.com
pass ログインするユーザーのパスワードです。 password
redirect ログイン後のリダイレクト先をパス指定で指定します。
この指定はコンフィグ > ログイン設定 > 基本設定の「現在のURLでログイン」や「ログイン後ページの指定」より優先されます。
/news/

エラー時の表示

バリデーションはテンプレート側で任意に指定することができますが、いくつかの値はプログラム側で強制的にバリデーションを設定しているため、テンプレートにバリデーターを設定していなくても、バリデータのエラーが表示されます。

パスワードによる会員サインインフォームで何らかのエラーが起きた場合には以下のフィールド(項目)がバリデーションエラーとして表示されます。



フィールド(項目)名 オプション名 概要
pass auth コンフィグ > アクセス設定 > ログイン制限で設定した制限に引っかかった場合及び、リファラーがサイトのドメインと違う場合に発生するエラー
mail lock コンフィグ > ログイン設定 > アカウントロックで設定した、パスワード認証の再試行制限に引っかかった場合に発生するエラー
mail restriction ログイン拒否端末からログインした場合に発生するエラー
passwordSignin enable パスワードによるサインイン機能が無効の場合に発生するエラー

サンプルコード

以下の例では、クエリストリングの値をグローバル変数として取得する機能を活用して、redirect に クエリストリングの値を指定することで動的にリダイレクト先を指定できるようにしています。

また、{email_auth_signin} 変数を活用して、メールアドレス認証によるサインイン認証機能に、管理画面から設定を変更するだけで切り替えられるようにしています。

  <form
    action=""
    method="post"
    class="acms-form"
    enctype="multipart/form-data"
  >
    <!-- BEGIN signin -->
    <div class="separate">
      <section class="separate-item">
        <h2 class="heading-md heading-margin-top-none acms-text-center">
          メールアドレスでサインイン
        </h2>

        <div class="validator-result-{mail:validator#restriction} acms-alert acms-alert-danger">
          お使いの端末(ブラウザ)からはログインが禁止されています。<br />管理者にお問い合わせ下さい。
        </div>
        <div class="validator-result-{pass:validator#auth} acms-alert acms-alert-danger">
          ユーザーIDまたはパスワードが違います
        </div>
        <div class="validator-result-{mail:validator#notFound} acms-alert acms-alert-danger">
          ユーザーが存在しません
        </div>
        <div class="validator-result-{mail:validator#send} acms-alert acms-alert-danger">
          認証メールの送信に失敗しました
        </div>
        <div class="validator-result-{mail:validator#lock} acms-alert acms-alert-danger">
          <!--$1-->{trialNumber}<!--/$1-->回ログインに失敗したため、アカウントがロックされました。
          <!--$1-->{lockTime}<!--/$1-->分後にもう一度試してください。
        </div>
        <div class="validator-result-{mailAuthSignin:validator#enable} acms-alert acms-alert-danger">
          メール認証によるサインイン機能は無効です
        </div>
        <div class="validator-result-{passwordSignin:validator#enable} acms-alert acms-alert-danger">
          パスワードによるサインイン機能は無効です
        </div>

       <!-- BEGIN badRequest -->
        <div class="acms-alert acms-alert-danger">
          不正なアクセスです。
        </div>
        <!-- END badRequest -->

        <!-- BEGIN expired -->
        <div class="acms-alert acms-alert-danger">
          有効期限切れのURLです。再度お試しください。
        </div>
        <!-- END expired -->

        <ul class="form-group-list">
          <li class="form-group">
            <div class="form-label">
              <label class="acms-form-block acms-clear" for="input-text-mail"
                >メールアドレス</label
              >
            </div>
            <div class="form-control">
              <input
                type="text"
                name="mail"
                value="{mail}"
                class="acms-form-large acms-form-block acms-form-width-full js-ready-focus"
                id="input-text-mail"
                placeholder=""
                autocomplete="username"
                data-validator="mail"
              />
              <input type="hidden" name="login[]" value="mail" />
            </div>
          </li>
          <!-- BEGIN_IF [{email_auth_signin}/neq/on] -->
          <li class="form-group">
            <div class="form-label">
              <label class="acms-form-block acms-clear" for="input-password"
                >パスワード</label
              >
            </div>
            <div class="form-control">
              <input
                type="password"
                name="pass"
                value="{pass}"
                id="input-password"
                class="acms-form-large acms-form-block acms-form-width-full"
                autocomplete="current-password"
              />
              <input type="hidden" name="login[]" value="pass" />
              <input type="hidden" name="redirect" value="%{redirect}" />
              <input type="hidden" name="login[]" value="redirect" />
            </div>
          </li>
          <!-- END_IF -->
        </ul>
        <!-- BEGIN_IF [{email_auth_signin}/neq/on] -->
        <p class="acms-text-center">
          <a
            href="%{BLOG_URL}%{RESET_PASSWORD_SEGMENT}/"
            class="text-link is-color-text is-bold"
            >パスワードをお忘れの方はこちらから</a
          >
        </p>

        <div class="form-button-group">
          <button
            type="submit"
            name="ACMS_POST_Member_Signin"
            class="button is-lg is-width-lg form-button"
          >
            サインイン
          </button>
        </div>
        <!-- END_IF -->

        <!-- BEGIN_IF [{email_auth_signin}/eq/on] -->
        <p class="form-button-group">
          <button
            type="submit"
            name="ACMS_POST_Member_SigninWithEmail"
            class="button is-lg is-width-lg form-button"
          >
            確認メールを送信
          </button>
        </p>
        <!-- END_IF -->
      </section>
    </div>
    <!-- END signin -->
  </form>

会員サインアップ(会員登録)フォームへのリンクを表示する

subscribeLink ブロックを活用することで、コンフィグ > ログイン設定 > 会員登録機能の「ユーザー登録の外部申請」が有効になっている場合のみ、会員サインアップ(会員登録)フォームへのリンクを表示するといったことができます。

<!-- subscribeLink ブロックは「ユーザー登録の外部申請」が有効になっている場合のみ表示される -->
<!-- BEGIN subscribeLink -->
<div class="acms-member-main-box-bottom">
  <div class="acms-grid">
    <p class="acms-col-6 acms-margin-none"><a href="%{BLOG_URL}%{SIGNUP_SEGMENT}/" class="acms-btn-flat acms-btn-block"><!--T-->新規会員登録<!--/T--></a></p>
    <p class="acms-col-6 acms-margin-none"><a href="%{BLOG_URL}" class="acms-btn-flat acms-btn-block"><!--T-->サイトに戻る<!--/T--></a></p>
  </div>
</div>
<!-- END subscribeLink -->

メール認証による会員サインイン

a-blog cms では、ユーザーにサインイン用のリンク及びコードを含むメールを送信し、サインインしてもらうことができます。この認証方法では、ユーザーのメールアドレスの検証も行います。

メール認証によるサインインでは、次のようなメリットがあります。

  • パスワードが必要がないため、サインアップ・サインインが簡単になります。
  • パスワードが再利用されるリスクが低くなります。パスワードを再利用すると、適切なパスワードを選択していても、セキュリティが低下する恐れがあります。
  • サインイン認証で、ユーザーがメールアドレスの正当な所有者であることを確認できます。
  • アクセス可能なメール アカウントがあればそれだけでサインインできます。SNSアカウントは必要ありません。
  • パスワードを入力(あるいは記憶)しなくても、安全にサインインできます。特に、パスワードの入力や記憶が面倒なモバイルデバイスでの利用が多い場合に有効です。

メール認証による会員サインインを有効化する

メール認証でユーザーをサインインさせるには、コンフィグ > ログイン設定のメール認証サインイン(管理ログイン)から「メール認証でのサインイン」を有効にして保存します。

また、メール認証サインインの有効時間を設定することも可能です。セキュリティのため出来るだけ短い時間を設定するのを推奨します。


メール認証サインインの設定

メール認証サインインの設定


サインインの流れ

メール認証によるサインインの流れを説明します。

1. サインイン画面にアクセス

サインイン画面にアクセスします。メール認証では、パスワード認証とは違いメールアドレスの入力欄のみが表示されます。


メール認証サインイン画面

メール認証サインイン画面

2. 登録されているメールアドレスを入力

サインインするアカウントのメールアドレスを入力して「確認メールを送信」ボタンを押すと、サインイン用のリンク及びコードを含むメールが送信されます。


認証メール送信後の画面

認証メール送信後の画面

3. 届いたメールにあるリンクにアクセスするか、確認コードをサインインフォームに入力する

届いたメールからサインイン用のリンクにアクセスするか、確認コードをサインインフォームに入力して「認証する」ボタンを押すことで、サインインができます。


認証メール

認証メール

ユーザーのメールアドレスに認証メールを送信する

メール認証によるサインインを実装するには、Member_Signin モジュールを利用してユーザーにメールアドレスの入力をさせるためのフォームを用意します。

以下の例では、{email_auth_signin} 変数を活用して、メールアドレス認証によるサインイン認証機能が有効のときだけパスワード入力欄とパスワードによるサインインボタンを非表示にしています。

  <form
    action=""
    method="post"
    class="acms-form"
    enctype="multipart/form-data"
  >
    <!-- BEGIN signin -->
    <div class="separate">
      <section class="separate-item">
        <h2 class="heading-md heading-margin-top-none acms-text-center">
          メールアドレスでサインイン
        </h2>

        <div class="validator-result-{mail:validator#restriction} acms-alert acms-alert-danger">
          お使いの端末(ブラウザ)からはログインが禁止されています。<br />管理者にお問い合わせ下さい。
        </div>
        <div class="validator-result-{pass:validator#auth} acms-alert acms-alert-danger">
          ユーザーIDまたはパスワードが違います
        </div>
        <div class="validator-result-{mail:validator#notFound} acms-alert acms-alert-danger">
          ユーザーが存在しません
        </div>
        <div class="validator-result-{mail:validator#send} acms-alert acms-alert-danger">
          認証メールの送信に失敗しました
        </div>
        <div class="validator-result-{mail:validator#lock} acms-alert acms-alert-danger">
          <!--$1-->{trialNumber}<!--/$1-->回ログインに失敗したため、アカウントがロックされました。
          <!--$1-->{lockTime}<!--/$1-->分後にもう一度試してください。
        </div>
        <div class="validator-result-{mailAuthSignin:validator#enable} acms-alert acms-alert-danger">
          メール認証によるサインイン機能は無効です
        </div>
        <div class="validator-result-{passwordSignin:validator#enable} acms-alert acms-alert-danger">
          パスワードによるサインイン機能は無効です
        </div>

       <!-- BEGIN badRequest -->
        <div class="acms-alert acms-alert-danger">
          不正なアクセスです。
        </div>
        <!-- END badRequest -->

        <!-- BEGIN expired -->
        <div class="acms-alert acms-alert-danger">
          有効期限切れのURLです。再度お試しください。
        </div>
        <!-- END expired -->

        <ul class="form-group-list">
          <li class="form-group">
            <div class="form-label">
              <label class="acms-form-block acms-clear" for="input-text-mail"
                >メールアドレス</label
              >
            </div>
            <div class="form-control">
              <input
                type="text"
                name="mail"
                value="{mail}"
                class="acms-form-large acms-form-block acms-form-width-full js-ready-focus"
                id="input-text-mail"
                placeholder=""
                autocomplete="username"
                data-validator="mail"
              />
              <input type="hidden" name="login[]" value="mail" />
            </div>
          </li>
          <!-- BEGIN_IF [{email_auth_signin}/neq/on] -->
          <li class="form-group">
            <div class="form-label">
              <label class="acms-form-block acms-clear" for="input-password"
                >パスワード</label
              >
            </div>
            <div class="form-control">
              <input
                type="password"
                name="pass"
                value="{pass}"
                id="input-password"
                class="acms-form-large acms-form-block acms-form-width-full"
                autocomplete="current-password"
              />
              <input type="hidden" name="login[]" value="pass" />
              <input type="hidden" name="redirect" value="%{redirect}" />
              <input type="hidden" name="login[]" value="redirect" />
            </div>
          </li>
          <!-- END_IF -->
        </ul>
        <!-- BEGIN_IF [{email_auth_signin}/neq/on] -->
        <p class="acms-text-center">
          <a
            href="%{BLOG_URL}%{RESET_PASSWORD_SEGMENT}/"
            class="text-link is-color-text is-bold"
            >パスワードをお忘れの方はこちらから</a
          >
        </p>

        <div class="form-button-group">
          <button
            type="submit"
            name="ACMS_POST_Member_Signin"
            class="button is-lg is-width-lg form-button"
          >
            サインイン
          </button>
        </div>
        <!-- END_IF -->

        <!-- BEGIN_IF [{email_auth_signin}/eq/on] -->
        <p class="form-button-group">
          <button
            type="submit"
            name="ACMS_POST_Member_SigninWithEmail"
            class="button is-lg is-width-lg form-button"
          >
            確認メールを送信
          </button>
        </p>
        <!-- END_IF -->
      </section>
    </div>
    <!-- END signin -->
  </form>

そして、認証用リンクが記載されたメールの送信には Member_SigninWithEmail というPOSTモジュールを活用します。

Member_SigninWithEmail モジュールによって、認証メールの送信が成功すると、Member_Signin モジュールの verifyCode ブロックが表示されます。また、verifyCode ブロック内では、認証メールの送信成功時に successSent ブロックが表示されます。

<!-- BEGIN_MODULE Member_Signin -->
<!-- BEGIN verifyCode -->
<div>
  <!-- BEGIN successSent -->
  <p class="form-message">本人確認のため、確認メールをお送りしました。<br>メールに記載されている確認リンクをクリックするか、下記に確認コードを入力してください。</p>
  <!-- END successSent -->
</div>
<!-- END verifyCode -->
<!-- END_MODULE Member_Signin -->

送信できる項目

Member_SigninWithEmail モジュールで送信できる項目については以下項目になります。

また、Member_SigninWithEmail モジュールで送信するフィールド(項目)は name 属性に login[] を、 value 属性に 送信したい項目名を指定した input タグを一緒に記述する必要があります。

<input
  type="text"
  name="mail"
  value="{mail}"
  id="input-text-mail"
  placeholder=""
  autocomplete="username"
/>
<input type="hidden" name="login[]" value="mail" />


項目名 概要 入力例
mail サインインするユーザーのメールアドレスです。 info@example.com

エラー時の表示

バリデーションはテンプレート側で任意に指定することができますが、いくつかの値はプログラム側で強制的にバリデーションを設定しているため、テンプレートにバリデーターを設定していなくても、バリデータのエラーが表示されます。

メール認証による会員サインインフォームで何らかのエラーが起きた場合には以下のフィールド(項目)がバリデーションエラーとして表示されます。



フィールド(項目)名 オプション名 概要
pass auth コンフィグ > アクセス設定 > ログイン制限で設定した制限に引っかかった場合及び、リファラーがサイトのドメインと違う場合に発生するエラー
mail notFound 送信したメールアドレスに一致するユーザーが存在しない場合及び、複数存在する場合に発生するエラー
mail lock コンフィグ > ログイン設定 > アカウントロックで設定した、パスワード認証の再試行制限に引っかかった場合に発生するエラー
mail restriction ログイン拒否端末からログインした場合に発生するエラー
mailAuthSignin enable メール認証によるサインイン機能が無効の場合に発生するエラー

認証メール

ユーザーは認証メールに記載されているURLへのアクセス及び、コードの入力によりサインインを完了するすることができます。この認証メールはカスタマイズすることが可能です。メールテンプレートについては、コンフィグ > メール設定から変更することができます。


コンフィグ > メール設定から認証メールのテンプレートを設定できます。

コンフィグ > メール設定から認証メールのテンプレートを設定できます。


認証メールでは以下の変数が利用できます。



変数名 概要
authUrl 認証用のURL
verifyCode 認証用の確認コード

認証メールに記載されているURLへアクセスして、メール認証サインインを完了する

認証メールに記載されているURLへアクセスすることで、メール認証サインインを完了してサインインすることができます。

メール認証が成功した場合は設定に従って適切なページにリダイレクトされますが、失敗した場合は、Member_Signin モジュールで以下のブロックが表示できます。



ブロック名 概要
badRequest 認証URLの形式が不正であるために、認証が失敗した場合に表示されるブロックです。
expired 認証URLが有効期限切れの場合に表示されるブロックです。

テンプレート上では、以下のように表示できます。

<!-- BEGIN_MODULE Member_Signin -->
    <!-- BEGIN badRequest -->
    <div class="acms-alert acms-alert-danger">
      不正なアクセスです。
    </div>
    <!-- END badRequest -->

    <!-- BEGIN expired -->
    <div class="acms-alert acms-alert-danger">
      有効期限切れのURLです。再度お試しください。
    </div>
    <!-- END expired -->
<!-- END_MODULE Member_Signin -->

認証メールに記載されている確認コードを入力して、メール認証サインインを完了する

認証メールに記載されている確認コードをサインインフォームに入力して送信することで、メール認証サインインを完了してサインインすることができます。

メール認証サインインを完了すると、設定に従って適切なページにリダイレクトされます。

認証メールに記載されている確認コードを利用するには、Member_Signin モジュールを利用してユーザーに確認コードの入力をさせるためのフォームを用意します。

認証メールの送信に成功すると、Member_Signin モジュールの verifyCode ブロックが表示されます。そのため、確認コードの入力フォームは verifyCode ブロック内にテンプレートを記述します。

<!-- BEGIN_MODULE Member_Signin -->
<!-- BEGIN verifyCode -->
<div>
  <!-- BEGIN successSent -->
  <p class="form-message">本人確認のため、確認メールをお送りしました。<br>メールに記載されている確認リンクをクリックするか、下記に確認コードを入力してください。</p>
  <!-- END successSent -->

  <div class="form-group-list is-narrow">
    <div class="form-group">
      <div class="validator-result-{mail:validator#lock} acms-alert acms-alert-danger">
        {trialNumber}回ログインに失敗したため、アカウントがロックされました。
        {lockTime}分後にもう一度試してください。
      </div>
      <div class="validator-result-{code:validator#auth} acms-alert acms-alert-danger">
        確認コードが違います
      </div>
      <div class="validator-result-{code:validator#request} acms-alert acms-alert-danger">
        不正なアクセスです
      </div>
      <div class="validator-result-{code:validator#expired} acms-alert acms-alert-danger">
        確認コードの有効期限が切れています
      </div>
    </div>
  </div>

  <ul class="form-group-list is-narrow">
    <li class="form-group">
      <div class="form-label">
        <label for="input-text-code" class="acms-form-block acms-clear">確認コード</label>
      </div>
      <input
        type="text"
        name="code"
        value="{code}"
        id="input-text-code"
        class="acms-form-large acms-form-block acms-form-width-full"
        placeholder=""
        data-validator="code"
      >
      <input type="hidden" name="login[]" value="code" />
      <input type="hidden" name="takeover" value="{signin:takeover}" />
    </li>
  </ul>
  <div class="form-button-group">
    <button
      type="submit"
      name="ACMS_POST_Member_SigninWithVerifyCode"
      class="button is-lg is-width-lg form-button"
    >
      サインイン
    </button>
  </div>
  <div class="form-button-group">
    <a href="%{BLOG_URL}%{SIGNIN_SEGMENT}/" class="button is-bordered is-lg is-width-lg form-button">サインイン画面に戻る</a>
  </div>
</div>
<!-- END verifyCode -->
<!-- END_MODULE Member_Signin -->

確認コードによる認証には、Member_SigninWithVerifyCode というPOSTモジュールを活用します。

送信できる項目

Member_SigninWithVerifyCode モジュールで送信できる項目については以下項目になります。

Member_SigninWithVerifyCode モジュールで送信するフィールド(項目)は name 属性に login[] を、 value 属性に 送信したい項目名を指定した input タグを一緒に記述する必要があります。

<div>
  <label for="input-text-code">確認コード</label>
</div>
<input
  type="text"
  name="code"
  value="{code}"
  id="input-text-code"
  placeholder=""
  data-validator="code"
>
<input type="hidden" name="login[]" value="code" />


項目名 概要 入力例
mail サインインするユーザーのメールアドレスです。 info@example.com
code 認証メールに記載されている確認コード 0MIJKI

SigninWithVerifyCode モジュールはユーザーのメールアドレスの情報を必要としますが、以下のように takeover の値を一緒に送信することで認証メール送信のために入力したメールアドレスの値を利用できるため、メールアドレスの入力は不要です。

<input type="hidden" name="takeover" value="{signin:takeover}" />

エラー時の表示

バリデーションはテンプレート側で任意に指定することができますが、いくつかの値はプログラム側で強制的にバリデーションを設定しているため、テンプレートにバリデーターを設定していなくても、バリデータのエラーが表示されます。

認証コード入力フォームで何らかのエラーが起きた場合には以下のフィールド(項目)がバリデーションエラーとして表示されます。



フィールド(項目)名 オプション名 概要
pass auth コンフィグ > アクセス設定 > ログイン制限で設定した制限に引っかかった場合及び、リファラーがサイトのドメインと違う場合に発生するエラー
code auth コード認証に失敗した場合に発生するエラー
code request 認証コードが不正な場合に発生するエラー
code expired 認証コードが有効期限切れの場合に発生するエラー
mail lock コンフィグ > ログイン設定 > アカウントロックで設定した、パスワード認証の再試行制限に引っかかった場合に発生するエラー
mail restriction ログイン拒否端末からログインした場合に発生するエラー

URLの末尾に .(ドット)含むURLでカスタムフィールド検索をするとサーバーの404エラーが表示される

カスタムフィールド検索で.(ドット)含む文字列で検索する場合、POST_2GETモジュールを利用して検索フォームを作成すると、検索ページのURLが以下のようになることがあります。

https://example.com/search.html/field/kataban/hoge.hoge

このようなURLの場合、Ver. 3.0.28 及び、Ver. 3.1.5 以前に a-blog cmsをダウンロードしたときに同梱されている .htaccess をそのまま利用している場合、a-blog cms が動作せず、サーバーの404エラーが表示されてしまう場合があります。

原因としては、.htaccess でCMSを実行するための mod_rewrite の記述にて、URLの末尾が特定の拡張子または、/(スラッシュ)の場合のみ a-blog cms のプログラムを実行するような指定がされている点です。

# ---------------------------
# CMSを実行
# ---------------------------
RewriteRule ((\.(html|htm|php|xml|txt|js|json|css|yaml|csv))|/)$ index.php [L]

これにより、POST_2GETモジュールを利用した検索フォームから遷移する、検索ページのURLの末尾に .(ドット)が含まれている場合、a-blog cms が動作せず、サーバーの404エラーが表示されてしまいます。

対応方法

.htaccess にて、CMSを実行するための mod_rewrite の記述を以下のように変更してください。

# ---------------------------
# CMSを実行
# ---------------------------
RewriteRule . index.php [L]