Craft 3 の Element API でログインユーザーのみアクセス可能なエンドポイントを作成する

Craft 3 の Element API でログインユーザーのみアクセス可能なエンドポイントを作成する方法をご紹介します。

Craft CMS Logo

Element API を定義する config/element-api.php の先頭に下記の関数を追加します。

function requireLogin() {
  $currentUser = Craft::$app->user->getIdentity();
  if (!$currentUser) {
    throw new \yii\web\ForbiddenHttpException('Unauthorized access');
  }
}

getIdentity() は Yii2 のパブリックメソッドで、ユーザーがログイン状態の場合に identify オブジェクトを返してくれます。

有効なログインセッションがなく、false もしくは null が返った場合、つまりログインしていない場合は 400 エラーを返すようにします。

そして、この関数を、エンドポイントを定義する関数の最初に入れてあげれば OK です。

return [
  'endpoints' => [
    'news.json' => function() {
      requireLogin(); // こに追加
      return [
        'elementType' => Entry::class,
        'criteria' => ['section' => 'news'],
        'transformer' => function(Entry $entry) {
          return [
            'title' => $entry->title,
            'url' => $entry->url,
            'jsonUrl' => UrlHelper::url("news/{$entry->id}.json"),
            'summary' => $entry->summary,
          ];
        },
      ];
    },
  ]
];
Published 2020-07-28
Updated 2020-07-28