logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll
09/04/2025, by Ivan

JSON:APIは完全にエンティティベースです。つまり、ビジネスルールを処理したり、「CRUD」として考えられないことを行ったりすることはできません。新しいアカウントの登録、ユーザーのログイン、新しいパスワードの要求といったビジネスロジックは、JSON:APIの一部ではありません。これらの多くはDrupalコアによってすでに提供されています。

以下に、一般的なニーズと解決策の完全ではないリストを示します。

関連するパスは次のとおりです:

  • /session/token
  • /user/register
  • /user/login
  • /user/login_status
  • /user/logout

セッショントークンを取得する

トークンを取得する

curl \
  --request GET http://drupal.d8/session/token

トークンはレスポンスボディにプレーンテキスト(JSONではない)として返されます。

トークンを使用する

ログインすると、セッショントークンに加えてcsrf_tokenとlogout_tokenが取得できます。ユーザーをシステムからログアウトさせるにはlogout_tokenが必要です(下記参照)。可変リクエスト(例:POST、PATCH、DELETE)にはcsrf_tokenまたはセッショントークンが必要です。

ユーザー登録

コアが提供するJSON:APIは新しいユーザー登録をサポートしていませんが、JSON:API User Resourcesモジュールをインストールすると、登録、パスワードのリセット、パスワードの更新のためのエンドポイントを含む、ユーザー関連のJSON:APIエンドポイントを追加できます。

あるいは、コアのRESTモジュールを使用することもできます。ユーザーがREST経由でアカウントを登録できるようにするには、user_registration RESTリソースを有効にする必要があります(下記のREST UIの例を参照してください)。

curl \
--header "Content-Type: application/json" \
--header "X-CSRF-Token: 57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ" \
--request POST "https://drupal.d9/user/register?_format=json" \
--data '{"name": {"value": "thename123"}, "pass": {"value": "thepass"}, "mail": {"value": "someone@example.com"}}'

X-CSRF-Tokenヘッダーにはセッショントークンの値を使用します。成功したレスポンスには、新しく作成されたユーザーのUUIDを含む、いくつかのユーザーフィールド値が含まれているはずです。

{
   "uuid" : [ { "value" : "3e75b757-831e-4bf7-bbb6-25b8c50c7ac0" } ]
}

また、訪問者が自分でアカウントを作成できる場合でも、レスポンスに「Set-Cookie」ヘッダーは含まれないことに注意してください。そのため、承認や確認が必要ない場合は、登録が成功した後、同じnameとpassの値を使用してユーザーをログインさせることができます。

ユーザーログイン

curl \
  --header "Content-type: application/json" \
  -c cookie.txt \
  --request POST "http://drupal.d8/user/login?_format=json" \
  --data '{"name":"admin", "pass":"admin"}'

-c cookie.txtは、curlにクッキーを保存するよう指示します。レスポンスは次のような形になるはずです。

{
   "csrf_token" : "57sTS-KS7UoYAWAPyzt0iJmo300CFct3jdKyWM-UiiQ",
   "logout_token" : "zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw",
   "current_user" : {
      "roles" : [
         "authenticated",
         "administrator"
      ],
      "name" : "admin",
      "uid" : "1"
   }
}

ユーザーステータス

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request GET "http://drupal.d8/user/login_status?_format=json"

-b cookie.txtは、前回のリクエストのクッキーを(保存ではなく)送信するようcurlに指示します。ログインしている場合は、レスポンスボディにプレーンテキスト形式(JSONではない)で1が返されます。それ以外の場合は0が返されます。

ユーザーログアウト

curl \
  --header "Content-type: application/json" \
  -b cookie.txt \
  --request POST "http://drupal.d8/user/logout?_format=json&token=zzRaD8ZgLT1TkG804mYpVVTyM-pgoDm4h9XZ9JHSoCw"

cookie.txtで認証されたユーザーをログアウトします。tokenクエリパラメーターにはlogout_tokenの値を使用します。

認証メカニズム

上記の例は、利用可能な数多くの認証メカニズムのうちのひとつにすぎません。自分のニーズに最適なメカニズムを検討してください。

Drupal OAuthモジュールはsimple_oauthとして利用できます。

参考資料

詳細については、次の変更記録を参照してください。

認証には、他の認証プロトコルを使用することも検討できます。

フロントエンドにJavaScriptアプリケーション、バックエンドにDrupalを使用する「クッキー」方式を選択した場合、ブラウザがクッキー保存のすべての処理を行ってくれます。ただし、JSアプリとDrupalサイトのドメイン名が異なる場合は、SameSiteクッキーパラメーターを「None」に変更して、ブラウザがユーザーのセッションクッキーを保存できるようにする必要があることを忘れないでください。これを行うには、services.ymlファイルを編集して、次のパラメーターを追加します。

parameters:
  session.storage.options:
    cookie_samesite: None

REST UI

REST UIコントリビュートモジュールを使用すると、コアのRESTモジュールのリソースを設定できます。このモジュールでユーザー登録を有効にする方法を見てみましょう。

  1. REST UIモジュールをインストールして有効にしたら、/admin/config/services/restにある設定ページに移動し、「User registration(ユーザー登録)」リソースを有効にします。リソースを編集して、たとえばPOSTメソッド、JSON形式、Cookieプロバイダーを有効にします。粒度を「method」に切り替えると、リクエストメソッドごとに形式とプロバイダーを分けることもできます。
  2. 次に、/admin/people/permissions/module/restで、匿名ユーザーに「Access POST on User registration resource(ユーザー登録リソースへのPOSTアクセス)」パーミッションを付与します。
  3. 最後に、/admin/config/people/accountsで、訪問者がアカウントを作成できることを確認します。

 

Drupalドキュメントからの記事です。