メンバー登録時にドメインによって所属グループを変更する
概要
メンバー登録時にドメインによって所属グループを変更する機能の実装方法を説明します。
Member::insert のエンドポイントはセキュリティ上、default_group_idをフロントエンドから変更できません。
そこで複数のエンドポイントを作成し、カスタム処理を利用して、ドメインによって利用するエンドポイントを振り分けることで機能を実装します。
学べること
以下の手順でドメインによって所属グループを変更する機能を実装します。
前提条件
このチュートリアルでは、エンドポイント及びカスタム処理の作成とSwagger UI を利用した動作の確認までを行います。
また、所属させるグループは事前に作成済みとします。
フロントエンドへの実装はKurocoとNuxt.jsで、新規会員登録画面を構築するを参考に対応をお願いします。
APIの設定
APIの作成
Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずは内部利用のためのAPIを新規で作成します。
Kuroco管理画面のAPIより「追加」をクリックします。

API作成画面が表示されるので、下記入力し「追加する」をクリックします。

| 項目 | 設定内容 | 
|---|---|
| タイトル | Internal | 
| 版 | 1.0 | 
| ディスクリプション | 内部処理用のAPI | 
APIが作成されました。

セキュリティの設定
次にセキュリティの設定をします。[セキュリティ] をクリックします。

セキュリティを[動的アクセストークン]に設定して、[保存する]をクリックします。

セキュリティを[動的アクセストークン]に設定後、Login::tokenのエンドポイントが無い場合、利用をお勧めされますが、内部利用のみの場合は無視して構いません。  

CORSの設定
次にCORSの設定をします。[CORSを設定する] をクリックします。

CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。
- 管理画面URL
 
CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。
- GET
 - POST
 - OPTIONS
 
CORS_ALLOW_CREDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。

問題なければ [保存する] をクリックします。
エンドポイントの作成
次にエンドポイントを作成します。
今回はdefault_group_idが異なる2つのMember::insertエンドポイントと、カスタム処理を呼び出すためのApi::request_api_postエンドポイントを作成します。  
まずはMember::insertエンドポイントです。
こちらはKuroco内部から呼び出して利用するため、InternalのAPIから[新しいエンドポイントの追加]をクリックして作成します。  

以下の2つを作成します。
| 項目 | 設定内容 | 
|---|---|
| パス | member/insert/a | 
| カテゴリー | メンバー | 
| モデル | Member | 
| オペレーション | insert | 
| default_group_id | 所属するグループID(101) | 
| login_ok_flg | チェックを入れる | 

| 項目 | 設定内容 | 
|---|---|
| パス | member/insert/a | 
| カテゴリー | メンバー | 
| モデル | Member | 
| オペレーション | insert | 
| default_group_id | 所属するグループID(102) | 
| login_ok_flg | チェックを入れる | 

次にApi::request_api_postエンドポイントです。
こちらはフロントエンドから利用できるAPIに作成します。今回はDefaultのAPIを利用します。
DefaultのAPIから[新しいエンドポイントの追加]をクリックします。

| 項目 | 設定内容 | 
|---|---|
| パス | member/insert | 
| カテゴリー | API | 
| モデル | Api | 
| オペレーション | request_api_post | 
| name | member_insert (後で設定するカスタム処理の識別子と一致させます。)  | 

以上で利用する3つのエンドが作成できました。

カスタム処理の作成
続いて、ドメインによってリクエストを送るエンドポイントを振り分けるカスタム処理を作成します。
[オペレーション] -> [カスタム処理]をクリックします。

[追加]をクリックします。

以下のように入力します。
| 項目 | 設定 | 
|---|---|
| タイトル | ドメインによって登録先を変える | 
| 識別子 | member_insert  (Api::request_apiエンドポイントのnameと一致させてください。)  | 
| 処理 | 以下のコードを入力します。 | 
{* POSTされたメールアドレスのドメインで登録先を変える。 *}
{* リクエスト ボディ *}
{assign_array var='body'            values=''}
{assign       var='body'    value=$smarty.post}
{* ドメインが@example.com以外の場合 *}
{if $smarty.post.email|strpos:'@example.com' === false}
    {api_internal
        var='response'
        status_var='status'
        endpoint='/rcms-api/4/member/insert/a'
        method='POST'
        queries=$body
        member_id='1'
    }
{* ドメインが@example.comの場合 *}
{else}
    {api_internal
        var='response'
        status_var='status'
        endpoint='/rcms-api/4/member/insert/b'
        method='POST'
        queries=$body
        member_id='1'
    }
{/if}
{assign var=data value=$response}

設定ができたら[追加する]をクリックしてカスタム処理を追加します。
動作確認
最後に動作の確認をします。
DefaultのAPIの[Swagger UI]をクリックします。

作成したエンドポイントの[Try it out]をクリックします。

Request bodyに以下を入力して[Execute]をクリックします。
{
  "email": "example@example.com",
  "name1":"Diverta",
  "name2":"Taro",
  "login_pwd":"********"
}

"新規追加しました"のメッセージとメンバーIDの表示を確認します。

続いて、Request bodyに以下を入力して[Execute]をクリックします。
{
  "email": "test@test.com",
  "name1":"Diverta",
  "name2":"Jiro",
  "login_pwd":"********"
}

"新規追加しました"のメッセージとメンバーIDの表示を確認します。

メンバー一覧ページで登録されたメンバーを確認すると、Diverta Taro と Diverta Jiro で所属するグループが異なることを確認できます。

以上でメンバー登録時にドメインによって所属グループを変更する機能の実装ができました。
関連ドキュメント
サポート
お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。