PowerCMS X では、電子メールを利用した2段階認証を標準でサポートしていますが、AuthTwilioプラグインを利用することで、Twilio SMSを利用した2要素認証(MFA)をサポートします。
準備
composer.json
{
"require": {
"twilio/sdk": "dev-main"
}
}
composer update を実行し、環境変数「composer_autoload」に vendor/autoload.php へのパスを指定
$ composer update
- プラグインを有効化し、システムの設定で「2段階認証」にチェックを入れて設定を保存してください。
- このプラグインの利用については Twilio のアカウントが必要です。
- アカウントがない場合、Twilio にサインアップしてアカウントの設定をしてください。
- トライアルアカウントの場合、検証された電話番号(Verified Caller IDs)にのみ送信できます。
- トライアルアカウントの場合、一部の高コストおよびプレミアムアクセス番号には、デフォルトでは送信できません。
- 無料トライアル電話番号から SMS を送信すると、「Sent from a Twilio Trial account」で始まるメッセージが挿入されます。このメッセージは、アップグレード後に削除されます。
- 会員専用サイトで利用する場合、必ずプラグイン「Members」を先に有効化し、スキーマアップグレードを行ってください(※)。
- Twilio に関わる内容についてはアルファサード株式会社ではサポート対象外となります。あらかじめご了承ください。
※「AuthTwilio」を有効化済みで後からプラグイン「Members」を有効にする場合、以下の点に注意してください。
- プラグイン「Members」を有効化しても、メンバーモデルに「携帯電話番号」入力欄は追加されません。
- プラグイン「AuthTwilio」を無効化してから再度有効化するとメンバーモデルに「携帯電話番号」入力欄が追加されます。
- プラグイン「AuthTwilio」の無効化時に追加されたカラムを削除したい時は、環境変数「authtwilio_remove_column」に true を指定してからプラグインの無効化を行ってください。
- ただし、「authtwilio_remove_column」を true にしてプラグインを有効化後に無効化するとすでに追加されたユーザーモデルの「携帯電話番号」入力欄が一度消えてしまいます(保存された値の復活はできません)。
プラグイン設定
システムプラグイン設定で、以下を設定してください。
- アカウントSID : Twilioのダッシュボードの「アカウントSID」を登録します。
- 認証トークン : Twilioのダッシュボードの「AUTHTOKEN」を登録します。
- 発信元電話番号 : Twilioから送信できる送信元の国際電話番号を入力してください(例:+122XXXXXXXX)。
- モデル : 2段階認証を利用するモデルをチェックしてください。プラグイン「Members」が有効でない場合「メンバー」チェックボックスは表示されません。
- 電子メールでも送信する : SMSとあわせて電子メールでも確認コードを送信する場合にチェックを入れてください。
ユーザーとメンバーの設定
プラグインを有効化すると、ユーザーとメンバー(Memberプラグインを利用している場合)に「携帯電話番号」入力欄が追加されます。
ここに、SMSを受信する携帯電話の国際電話番号を入力してください(例:+8190XXXXXXXX)。
この欄に入力のない場合、電子メールアドレス宛に確認コードが送信されます。
設定が完了したら、ログインを行い SMS で確認コードが送信できるか確認してくだい。
確認コード SMSのテンプレートのカスタマイズ
デフォルトのテンプレートは下記にあります。
PowerCMSX/plugins/AuthTwilio/tmpl/email/confirmation_code_sms.tmpl
システムにベースネーム「confirmation_code_sms」クラス「メール」としてビューを作成すると、そのテンプレートが代わりに使われるようになります。
以下はデフォルトのビューの内容です。SMSの文字数制限を超えないように注意してください。
<mt:trans phrase="%s Confirmation Code is '%s'." params="'$appname','$confirmation_code'" component="AuthTwilio">
※ Twilio は Twilio, Inc.の商標または登録商標です。